1

在我的应用程序中,我需要使用 webview 来加载许多 html 文件。多次用户操作后,应用程序崩溃。LogCat 显示以下错误:ReferenceTable overflow(max=512)。我也找到了崩溃的原因。这是 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();
}

我的错误日志如下: 在此处输入图像描述

同样的问题:Android Webview JNI ERROR with loadUrl

4

1 回答 1

0

正如您在我的回答中看到的:Android Webview JNI ERROR with loadUrl当页面加载失败时,我每 150 次销毁 Activity。在您的情况下,您需要计算每个页面加载并在特定数量(如 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 秒内为空白/黑色,并且您的 Activity 从头开始​​重新启动,因此如果您想继续阅读实际章节等,您应该保存所有相关信息。
我希望这对你有用!

于 2013-10-04T03:58:19.893 回答