【发布时间】:2011-11-01 18:33:41
【问题描述】:
我已经收到关于 SQLiteDiskIOExceptions 的报告有一段时间了(通过 Flurry/acra)。我无法在本地重现该问题,但这是我最常见的崩溃,在糟糕的一天中每 50 个会话中发生一次。它们在 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 缓存相关的任何内容,但这并没有帮助。
有没有人知道我可以用什么方法来预防、捕捉或更清楚地隔离这些异常的原因?它们太频繁了,不能仅仅由坏的 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);
}
});
XML:
<WebView android:id="@+id/webkit" android:layout_width="fill_parent" android:layout_height="fill_parent" android:focusable="true" android:nextFocusDown="@+id/bottomview"></WebView>
【问题讨论】:
-
请说明您是如何实现 webview 的。
-
编辑了问题以包含代码。我确实看到了这个:stackoverflow.com/questions/3130654 最近,因此我正在考虑以编程方式而不是使用 XML 创建 WebView。
-
对于未能在赏金到期前接受答案表示歉意(授予了一半的赏金)——一些 RL 问题分散了我的注意力,我错误地认为它还有一天的运行时间。
-
@SvenViking 以下解决方案对您有用吗?
-
tarkeshwar:不完全是。不过,我确实发现我添加的一种清除缓存的方法是为了解决这个问题实际上让情况变得更糟,所以通过恢复它,我能够将错误的频率降低到模糊的可容忍水平。
标签: android sqlite exception webkit webview