WebView构造函数中的异常
我的Android Java应用程序显示一些HTML内容,但并非在初始屏幕上显示。为了让应用初始加载更快,WebView 会在需要时动态初始化:
m_TheEntry = new WebView(Ctxt); //Ctxt is an Activity
m_TheEntry.setTag("Entry");
m_TheEntry.setWebViewClient(new EntryClient());
if(BuildConfig.DEBUG)
m_TheEntry.setWebChromeClient(LoggingChromeClient.The);
m_TheEntry.setLayoutParams(...);
m_TheEntry.getSettings().setJavaScriptEnabled(true);
m_TheEntry.addJavascriptInterface(m_JSHelper = new EntryJSHelper(), "host");
m_TheEntry.getSettings().setBuiltInZoomControls(true);
//m_EntryFrame is a layout object
m_EntryFrame.addView(m_TheEntry);
大多数情况下,它按预期工作。但我收到了崩溃报告,WebView 的构造在用户设备上会抛出各种异常。最近的一些报告显示 android.content.res.Resources$NotFoundException: Resource ID #0x40c0008,但一些较早的报告是 android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installed 。
这怎么可能?WebView 是一个SDK类,难道它应该存在于Android的所有版本/变体中吗?那么,应该如何从中做出合理的回退?
解决方案
正如评论中所提到的。Android WebView 是SDK的一部分,但其实际的 WebView 引擎是一个独立的组件,通常是Android系统的WebView或 Chrome,可以从 playStore 更新/启用。在某些情况下,例如用户可能禁用WebView、OEM ROM的 WebView已损坏等,在所有这些场景下它都会抛出异常。因此这不是你的代码问题,而是 webView 设计的工作方式。
我建议你添加try-catch块来防止这类崩溃,在不可用时显示不同的UI,或根据你的需求处理某些错误情景。
例如:-
WebView webView;
try {
webView = new WebView(context);
} catch (Throwable error) {
Log.e("WebView", "WebView not available", error);
yourFallbackUI();
return;
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。