zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    零基础学python-2.7 列表与元组
    什么是App加壳,以及App加壳的利与弊
    Linux tar包安装Nginx
    GT背靠背onsite
    编程算法
    DELPHI动态创建窗体
    扩展名为DBF的是什么文件啊?
    异构数据库之间完全可以用SQL语句导数据
    XP局域网访问无权限、不能互相访问问题的完整解决方案
    Delphi 之 菜单组件(TMainMenu)
  • 原文地址:https://www.cnblogs.com/renhui/p/13942060.html
Copyright © 2011-2022 走看看