在主线程中将unicode文件help.htm加载到Web视图中



我正在尝试将文件"assets/help-English/help.htm"加载到网络视图[命名为howTo]。它捕获IOException并将错误消息加载到Web视图中。我在logcat"应用程序可能在其主线程上做了太多工作"中发现了这一点。

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

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

帮助文件是unicode格式的,因此它们将以各种语言显示。我用过谷歌翻译。它们是使用简单的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会抱怨。

"如果要执行的操作不是即时的,则应确保在单独的线程("后台"或"工作线程")中执行这些操作。"进程和线程。

最新更新