Android 9.0 版本以上,多进程访问对WebView的影响

报错 日志

Caused by: java.lang.RuntimeException: Using WebView from more than one process at once with the same data directory is not supported. https://crbug.com/558377

原因

为改善 Android 9 中的应用稳定性和数据完整性,应用无法再让多个进程共用同一 WebView 数据目录。
此类数据目录一般存储 Cookie、HTTP 缓存以及其他与网络浏览有关的持久性和临时性存储。在大多数情况下,您的应用只应在一个进程中使用 android.webkit 软件包中的类,例如 WebView 和 CookieManager。
例如,您应该将所有使用 WebView 的 Activity 对象移入同一进程。
您可以通过在应用的其他进程中调用 disableWebView(),更严格地执行"仅限一个进程”规则。
该调用可防止 WebView 在这些其他进程中被错误地初始化,即使是从依赖内容库进行的调用也能防止。如果您的应用必须在多个进程中使用 WebView 的实例,则必须先利用 WebView.setDataDirectorySuffix() 函数为每个进程指定唯一的数据目录后缀,然后再在该进程中使用 WebView 的给定实例。
该函数会将每个进程的网络数据放入其在应用数据目录内自己的目录中。

解决方案

//调用最好放在方法内
public void onBaseContextAttached(Context base) {super.onBaseContextAttached(base);setWebDataSuffixPath(this);
}public void setWebDataSuffixPath(Context context) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {String processName = getProcessName(context);if (!"默认是你的包名".equals(processName)) {//判断不等于默认进程名称WebView.setDataDirectorySuffix(processName);}}}public String getProcessName(Context context) {if (context == null) return null;ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {if (processInfo.pid == android.os.Process.myPid()) {return processInfo.processName;}}return null;}

注意

setWebDataSuffixPath 的调用一定是在进程初始化的时候调用,最好在Application内调用且放在你其他第三方sdk调用之前执行;AIDL解决不同进程WebView共享数据的问题

Android 9.0 版本以上,多进程访问对WebView的影响相关推荐

  1. 【Android 安全】DEX 加密 ( 不同 Android 版本的 DEX 加载 | Android 8.0 版本 DEX 加载分析 | Android 5.0 版本 DEX 加载分析 )

    文章目录 一.不同版本的 DEX 加载 1.Android 8.0 版本 DEX 加载分析 2.Android 6.0 版本 DEX 加载分析 3.Android 5.0 版本 DEX 加载分析 一. ...

  2. flyme最新7基于android,终于来了,魅族开始基于Android 7.0版本的Flyme内测

    拼 命 加 载 中 ... 在大部分厂商已经跟进基于Android 7.0的版本时,作为国内最著名的定制ROM之一的Flyme还停留在基于Android 6.0的版本,在系统更新速度上落后了很多.不过 ...

  3. android 10.0版本合入GMS包

    gms包集成步骤: (1) 需要下载对应gms,国内需要通过VPN下载.下载后解压,文件目录:partner_gms.下载时,最好核对一下匹配的android版本. (2)依照路径打开gms.mk/g ...

  4. 小米note android 5.0,小米Note顶配版首曝光 预装Android 5.0版本MIUI6

    小米在1月15日正式发布了小米Note新机,同时还为发烧友定制推出了小米Note顶配版,搭载了强劲的骁龙810处理器.4GB RAM.2K显示屏等高端配置,如今从曝光的图片显示,小米Note顶配版将直 ...

  5. 小米note android 5.0,预装Android 5.0版本MIUI6 小米Note顶配版首曝光

    感谢JetaimeTech的投递 小米在1月15日正式发布了小米Note新机,同时还为发烧友定制推出了小米Note顶配版,搭载了强劲的骁龙810处理器.4GB RAM.2K显示屏等高端配置,如今从曝光 ...

  6. android 6.0版本名字,棉花糖Marshmallow 是Android 6.0的名字

    Android 6.0 五月下旬在 I/O 大会上亮相,将于今年秋天与用户见面.但是依照惯例,谷歌并没有宣布新 Android 的代号全称,而 Android M 中 M 所代表的甜品:Marshma ...

  7. android 4.0版本手机接受多条短信分析

    手机接受多条短信分析 1. 空闲中整理下笔记,先上android 4.0 短信接收多条异常问题处理,再写 android 4.5 的.  实例:android4.0版本以及以前版本 [信息]对比机发送 ...

  8. 小米4 Android 6.0 版本 Root 并安装 Xposed 框架攻略

    本文首发:http://prototypez.github.io/2016/05/16/root-and-install-Xposed-framework-on-XiaoMi4-with-Androi ...

  9. Android 9.0及以上版本中,关于多进程问题对于WebView的影响

    "Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView" 以上为官方给出的说明,用白话来说就是,一个app中,如果有多个进程A.B.C,并且在A ...

最新文章

  1. SolrJ查询Solr数据
  2. graphic头文件函数_graphics.h头文件
  3. Linux工作笔记031---Centos7.3下安装tomcat
  4. 汉王拉开人脸识别产业化大幕 市场应用前景广阔
  5. 18kw丹佛斯变频器常见故障_变频器常见故障——输出不平衡、过载、开关电源损坏...
  6. 一文读懂质量保证和质量控制
  7. 英特尔服务器主板g41性能,什么叫优化好,英特尔G41集成显卡也能流畅运行
  8. 使用python暴力破解压缩包密码winrar解压密码破解源代码
  9. 论AI在叮咚智能音箱中的演进和应用
  10. 学习Matlab第三天——画3D图
  11. 键盘属于计算机主机吗,这是键盘?不,这是一台电脑主机
  12. js-时间相关操作(获取当前日期、最近三天、近一月及前N天的日期)
  13. 【C++从入门到入土】第五篇:继承(爆肝画图详解)
  14. PTA 7-6 评委打分 java语言 班级里要搞智力竞赛 同学们都踊跃参加。进入最后决赛的是10个同学,随着一道道题目的出示,有时是1号选手得分,有时是5号选手得分,每次答对者得10分
  15. 医学影像配准 NCC Loss
  16. spring cloud 之 Ribbon
  17. oracle表空间扩容asm,oracle表空间文件系统迁移到ASM
  18. 01-旭日X3派测评——开箱测试系统烧写性能初测
  19. matlab单机无限大系统_基于MATLAB的单机无穷大系统短路故障分析
  20. Gemini.Workflow 双子工作流入门教程二:定义流程:流程节点介绍

热门文章

  1. 利用scrapy框架爬取网易新闻排行榜
  2. MCE | 免疫检查点大组团
  3. 学会这5个方法,全网任意免费复制,告别付费复制
  4. MFC小技巧系列——1、初始焦点设置
  5. Typora 甘特图
  6. java swing课程表设计_javaswing.Shedule 这是一个简单的课程表设计,数据连接为oracle 238万源代码下载- www.pudn.com...
  7. 计算机科学与技术毕业程序设计,基于web的程序设计-计算机科学与技术毕业论文.doc...
  8. 开发小程序,05 后程序员直呼“太简单”?
  9. 16K 16BIT双声道文件格式解析
  10. 取消Linux下蜂鸣声