在我的应用中,我需要使用webview加载许多html文件。经过多次用户操作后,应用程序崩溃了。 LogCat显示以下错误:ReferenceTable overflow(max=512)
。我还发现了崩溃背后的reason。这是os 4.1之前的webkit中的一个错误
我不知道如何避免这个错误。任何解决方法表示赞赏。
编辑:我只是使用mWebview加载本地html文件(包含在epub文件中)。 mWebView.loadChapter(mSpine.get(mIndex).getHref());
public void loadChapter(String path){
//loadUrl(resourceUri.toString());
Object localObject = "";
try{
InputStream is = this.getmBook().fetchFromZip(path);
localObject = fromStream(is);
is.close();
}catch(Exception e){
e.printStackTrace();
}
String str1 = "file:///" + path;
this.clearCache(true);
loadDataWithBaseURL(str1, (String)localObject, "text/html", "utf-8", null);
}
public String fromStream(InputStream in) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder out = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
out.append(line);
}
return out.toString();
}
我的错误日志如下:
答案 0 :(得分:0)
正如您在我的回答中所看到的:Android Webview JNI ERROR with loadUrl当页面加载失败时,我每150次销毁一次活动。在您的情况下,您需要计算每个页面加载,并在特定数量(如150次)之后通过调用函数来销毁并重新启动它:
public void KillThisThenStartNewOne(){
Intent intent = new Intent(this.getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.getApplicationContext().startActivity(intent);
//for restarting the Activity
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}
由于这是一种解决方法,结果将是屏幕将为空白/黑色,可能持续0.5到1秒,并且您的活动从头开始重新启动,因此如果您想继续阅读实际内容,则应保存所有相关信息章节等 我希望这对你有用!