我正在尝试将文件“assets/help-English/help.htm”加载到 webview [名为 howTo] 中。它捕获 IOException 并将错误消息加载到 Web View 中。我在 logcat 中找到了这一点“应用程序可能在其主线程上做了太多工作”。
我是否需要为此进程创建一个线程,或者我是否有其他问题导致此消息?我已经有了创建线程的代码,所以这不是问题。如果我错过了什么,我只是不想这样做。
我想我可能错过了一些东西,因为我确信我过去已经成功地从 Assets 中读取了内容,而没有创建单独的线程。
帮助文件采用 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);
最佳答案
您不需要使用不同的线程,但如果 Assets 文件足够大,读取文件将花费足够的时间,Android 会提示。
“如果要执行的操作不是即时的,则应确保在单独的线程(“后台”或“工作”线程)中执行这些操作。” Processes and Threads .
关于java - 将 unicode 文件 help.htm 加载到主线程中的 webview 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29867230/