最近在错误日志统计平台上看到一个WebView的报错,这个报错之前没有遇到过。错误内容如下:
java.lang.RuntimeException Using WebView from more than one process at once with the same data directory is not supported
经过查找相关资料,发现是Android P发布的时候,对WebView相关的使用方式进行了变更:不允许多进程使用同一个目录的WebView,需要为不同进程的WebView设置不同目录。
可以看出来,当我们的targetSdkVersion为28及以上的时候,且需要在多进程模式下使用WebView的时候,就需要对进行相应的调整,以便正确的支持。
1.多进程WebView使用问题复现
首先需要将应用的targetSdkVersion的Api级别设置为28及以上版本。然后通过两个处于不同进程的 Activity 分别使用 WebView 加网页实现。
对Activity设置不同进程可以使用下面的配置方式:
<activity android:name=".TestWebViewActivity" android:process=":ProcessName" />
最后,在Android P 的真机上运行,就可以重现之前提到的错误。
2.多进程WebView使用问题修复
很显然,webview的错误是在不同进程下导致的,也就是说Android P针对 WebView在不同进程下无法访问非自己进程中的webview目录。
解决这个问题,就需要兼容Android P的机制:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 修復WebView的多進程加載的bug
initWebView();
}
private void initWebView() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName();
WebView.setDataDirectorySuffix(processName);
}
}
}
本问题的示例代码地址为:
链接:https://pan.baidu.com/s/1RrActtFvjQ4X9l18FMx5sQ
提取码:p09p