Android 9.0/P WebView 多进程使用的问题

最近在错误日志统计平台上看到一个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 

 

posted @ 2020-11-07 21:18  灰色飘零  阅读(4330)  评论(0编辑  收藏  举报