• 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 

  • 相关阅读:
    Servlet和Filter的url匹配
    iterator的用法
    python学习笔记
    python的序列之列表
    java开发实战学习笔记3
    java学习笔记4
    Java Java集合
    Struts2中的几个符号
    DbHelper.cs
    做word,excel时需要引用com
  • 原文地址:https://www.cnblogs.com/renhui/p/13942060.html
Copyright © 2020-2023  润新知