如何让基于WebView的Android Java应用独立于浏览器运行?
解决WebView应用随浏览器强制停止而崩溃的问题
默认Android系统中,WebView组件会与系统预装的浏览器(如Chrome)共享渲染进程。当浏览器被强制停止或崩溃时,共享的进程被销毁,你的WebView应用也会随之终止。以下是几种可行的解决方法:
给WebView分配独立进程
在AndroidManifest.xml里,给承载WebView的Activity指定专属进程:<activity android:name=".YourWebViewActivity" android:process=":webview_process" />这样WebView会在单独的进程中运行,和浏览器、应用主进程隔离开。需要注意的是,跨进程的数据交互要用到AIDL或Messenger,不能直接共享内存数据。
启用WebView沙箱模式(API 24+)
Android 7.0及以上版本支持WebView沙箱,能让渲染进程完全独立:WebSettings webSettings = webView.getSettings(); webSettings.setSandboxEnabled(true);开启后,WebView的渲染进程和系统浏览器进程完全无关,浏览器崩溃或被强制停止都不会影响你的应用。
使用独立WebView内核
放弃系统自带WebView,改用第三方独立内核(比如腾讯X5、Crosswalk)。这类内核完全运行在你的应用进程内部,不依赖系统浏览器,从根源上避免浏览器故障牵连应用。不过要注意内核包体积会增加应用大小。捕获WebView进程崩溃事件
即使做了进程隔离,也可以添加回调处理崩溃场景,避免应用直接终止:webView.setWebViewClient(new WebViewClient() { @Override public void onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { super.onRenderProcessGone(view, detail); if (!detail.didCrash()) { // 进程正常终止,尝试重新加载页面 view.reload(); } else { // 进程崩溃,显示错误页面或提示用户 } } });
内容的提问来源于stack exchange,提问作者user24060829
相关产品推荐
相关产品推荐

