我在Gingerbread之前的设备上遇到了这个无法捕获的异常:
java.lang.NullPointerException: null
at android.webkit.WebViewDatabase.getCacheTotalSize(WebViewDatabase.java:735)
at android.webkit.CacheManager.trimCacheIfNeeded(CacheManager.java:557)
at android.webkit.WebViewWorker.handleMessage(WebViewWorker.java:195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.os.HandlerThread.run(HandlerThread.java:60)
我只使用WebView for AdMob广告,所以这很烦人。
有没有办法阻止这些崩溃?
答案 0 :(得分:0)
如果您的minSdkLevel是Donut或更高版本,请尝试此操作(在加载任何广告之前):
if (VERSION.SDK_INT < 9) {
try {
Method m = WebViewDatabase.class.getDeclaredMethod("getCacheTotalSize");
m.setAccessible(true);
m.invoke(WebViewDatabase.getInstance(thisContext));
}
catch (Exception e) {
// disable webview/ads
}
}
如果你的minSdkLevel早于Donut,你需要使用另一种方法来测试SDK级别:
private static int getSdkInt() {
try {
return Integer.parseInt(VERSION.SDK);
}
catch (Throwable t) {
return -1;
}
}
答案 1 :(得分:0)
我得到了它的工作:
public static final boolean webViewIsProbablyCorrupt(Context context) {
try {
SQLiteDatabase cacheDb = context.openOrCreateDatabase("webviewCache.db", 0, null);
if (cacheDb != null) {
cacheDb.close();
return false;
}
} catch (Throwable t) {
Log.w(TAG, t);
}
return true;
}