WebView导致SQLiteDiskIOException

Sve*_*ing 9 sqlite android webkit exception webview

我已经获得SQLiteDiskIOExceptions的报告已经有一段时间了(通过Flurry/acra).我无法在本地重现这个问题,但这是我最常见的崩溃,在糟糕的一天发生了五十次一次.它们在Android 2.3.x下似乎特别频繁.

我在自己的代码中完全没有使用SQL,但是我同时运行了多个WebView(两个,加上一个广告SDK).所有错误似乎都是由WebView引起的,通过以下任何一种方法:

  • android.webkit.WebViewDatabase.clearCache
  • android.webkit.WebViewDatabase.flushCacheStat
  • android.webkit.WebViewDatabase.deleteCookies
  • android.webkit.WebViewDatabase.removeCache

(还收到了几个关于android.database.sqlite.SQLiteDatabaseCorruptException的报告,但这些都非常罕见).我在我自己的代码中注释掉了与清除WebView缓存相关的任何内容,但这没有帮助.

完整的LogCat转储在这里.

有谁知道我可以预防,捕捉或更清楚地隔离这些例外的原因的任何方式?它们太频繁而不仅仅是由坏的SD内存引起的.

谢谢!

编辑:请求的源代码:

  browser=(WebView)findViewById(R.id.webkit);
  browser.setWebViewClient( new CustomWebViewClient(this,browser) );
  WebSettings webSettings = browser.getSettings();
  webSettings.setJavaScriptEnabled(true);
  webSettings.setPluginsEnabled(true);
  browser.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY);
  webSettings.setBuiltInZoomControls(true);

  browser.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress) {
      progressbarhorizontal.setProgress(progress);
    }
  });
Run Code Online (Sandbox Code Playgroud)

XML:

        <WebView android:id="@+id/webkit" android:layout_width="fill_parent" android:layout_height="fill_parent" android:focusable="true" android:nextFocusDown="@+id/bottomview"></WebView>
Run Code Online (Sandbox Code Playgroud)

NuS*_*ler 5

您可以使用setUncaughtExceptionHandler()来捕获异常并优雅地处理它.


小智 3

我也在努力寻找这些错误的确切根源。我在 Google Groups AdMob 论坛上发现了一个帖子,表明它可能与 AdMod SDK 有关。对我来说,这些错误是在我发布最新更新后开始出现的,其中包括将 AdMob SDK 从 v4.1.1 升级到 v4.3.1。您在使用 AdMob 吗?

似乎 AdMob SDK 在某些情况下会脱离 UI 线程来操作其 WebView,我猜这可能会导致各种问题,例如在管理缓存时从不同线程进行并发 SQLite 访问。可能与Android 中的 SQLiteDiskIOException有关。可能还值得检查您自己的代码是否不会在 UI 线程之外操作 WebView。