将 unicode 文件 help.htm 加载到主线程中的 webview

load a unicode file help.htm into a webview in main thread

我正在尝试将文件 "assets/help-English/help.htm" 加载到网络视图 [名为 howTo] 中。它捕获 IOException 并将错误消息加载到 webview 中。我在 logcat "The application may be doing too much work on its main thread".

中找到了这个

我是否需要为此进程创建一个线程,或者我是否有其他问题导致此消息?我已经有了创建线程的代码,所以这不是问题。如果我错过了什么,我不想这样做。

我想我可能错过了一些东西,因为我确信我过去已经成功地读取了资产而没有创建单独的线程。

帮助文件采用 unicode 格式,因此它们将以多种语言显示。为此,我使用了 Google 翻译。它们是使用简单 HTML 编辑器和记事本创建的小于 10K 字节的简单 unicode 文本文件。

log.i 语句显示预期的文本。 While 循环中的那个没有被执行。

AssetManager am = activity.getAssets();
StringBuilder sb = new StringBuilder(1024);
String lineHelp;

Log.i(TAG, "Locale = " + Locale.getDefault().getDisplayLanguage());
Log.i(TAG, "Locale = " + Locale.getDefault());
try {
    InputStream is = am.open("help-" +     Locale.getDefault().getDisplayLanguage()
     + "/help.htm");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while((lineHelp = br.readLine()) != null) {
    Log.i(TAG, "lineHelp = " + lineHelp + "\n");
    sb.append(lineHelp);
}
} catch (IOException e) {
    sb.append(getString(R.string.HelpFileProblem));
    sb.append(e.getMessage());
}
lineHelp = sb.toString();
Log.i(TAG, "lineHelp = " + lineHelp);
howTo.loadDataWithBaseURL(null, lineHelp, "text/html", "unicode", null);

不需要使用不同的线程,但如果资产文件足够大,读取文件将花费足够的时间 Android 会抱怨.

"If you have operations to perform that are not instantaneous, you should make sure to do them in separate threads (" 背景”或 "worker" 个线程)。” Processes and Threads.