最近在后台发现app报webview的错误,主要原因是Android P的行为变更导致的。

WebView崩溃错误

java.lang.RuntimeException

Using WebView from more than one process at once with the same data directory is not supported

webview报错

解析

Android P行为变更,不可多进程使用同一个目录webView,需要为不同进程webView设置不同目录。

Android P 变更

Android Pie ( API 级别 28 ) 是谷歌于 2018 年 8 月 7 日发布的正式版系统。将 targetSdkVersion 设为 API 28 或更高级别的应用必须进行修改,以便正确支持这些行为

Android P 针对WebView变更

模拟WebView错误

第一步

将应用的 targetSdkVersion 的 API 级别设为 28

第二步

通过两个处于不同进程的 Activity 分别使用 WebView 加网页实现

第三步

为 Activity 设置进程需要在 AndroidManifest.xml 文件中对应的 Activity 节点下增加 process 属性,并设置进程名

package="com.zyb.webviewtest">

......

android:name=".TestWebViewActivity"

android:process=":ProcessName" />

......

注意:process 的命名不能以数字开头,否正会提示 Install failed。

最后,在Android P 的模拟器或真机上运行,就可以重现之前提到的错误。如果没有重现,请将清单文件中 Application 节点下的 name 属性注释后重试。

修复WebView错误

很显然,webview的错误是在不同进程下导致的,也就是说Android P针对 WebView在不同进程下无法访问非自己进程中的webview目录。

解决这个问题,就需要兼容Android P,上代码:

public class TestApplication extends Application {

private static final String PROCESSNAME = "com.zyb.webviewtest";

@Override

public void onCreate() {

super.onCreate();

//放在onCreate方法中,部分小米手机未生效,同样还会报错,故放在分包时配置webview缓存

//initWebView();

}

@Override

protected void attachBaseContext (Context base) {

super.attachBaseContext(base);

initWebView();

MultiDex.install(this);

}

private void initWebView() {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {

String processName = getProcessName(this);

if (!PROCESSNAME.equals(processName)) {

WebView.setDataDirectorySuffix(getString(processName, "zyb"));

}

}

}

}

我们可以为每个进程指定唯一的数据目录后缀,再该进程中使用WebView。

在Application分包的时候设置对应的WebView数据目录后缀。

之前将webview的初始化放在Application中的onCreate()方法中,部分小米手机使用不生效,还是会报同样的错误。

所以将webview的初始化放在

方法中,也就是在分包时就初始化,最终解决了这个问题~

为什么在Application初始化的时候设置呢?

Application的 attachBaseContext() 方法在分包时调用,我们可以在新开进程的时候拿到当前的进程名称与主进程进行对比,如果不一致,我们就为该进程指定对应的WebView缓存目录后缀。

最后

重新运行在Android P上测试,在App安装路径下 (data/data/包名) 会发现多一个对应进程后缀的webview缓存目录。

最后,希望此篇博客对大家有所帮助,欢迎提出问题及建议共同探讨,如有兴趣可以关注我的博客,谢谢!

小米安卓java模拟器手机版_Android P(9.0) 行为变更完美适配WebView(小米手机也适用)...相关推荐

  1. java模拟器游戏要钱吗_安卓java模拟器(安卓手机如何玩JAVA游戏以及JAVA软件的方法)...

    首先最简单的方法就是JAVA模拟器,但是由于JAVA模拟器的兼容性并不是太好而导致部分(挺大部分的)机型无法使用.所以就有了第二个方法,那就是PSP模拟器,因为PSP上是有JAVA模拟器的,所以就可以 ...

  2. 安卓java模拟器_用大白话告诉你:Java 后端到底是在做什么?

    作者:黄小斜 阅读本文大概需要 6 分钟. 新手程序员通常会走入一个误区,就是认为学习了一门语言,就可以称为是某某语言工程师了.但事实上真的是这样吗?其实并非如此. 今天我们就来聊一聊,Java 开发 ...

  3. 有没有安卓4.0的java模拟器_电脑端安装Android4.0模拟器使用教程

    如今说到什么智能手机最火,那很多人肯定会说android系统的手机.如果你还没有Android手机,又想买一部试试,可是价格都不便宜,买来不适合自己怎么办?那么可以先在电脑上安装一个Android模拟 ...

  4. python编辑器安卓手机版_python编译器安卓下载-python编译器手机版下载v1.8.0 安卓版-2265安卓网...

    python编译器手机版是一款超棒的编程工具.专业的编程内容设计,多种多样的语言选择,完美的脚本,强大的功能,没有任何广告,快速的编写,还有快速提示,自由复制等等! python编译器安卓软件介绍 - ...

  5. 华为鸿蒙os手机版,华为鸿蒙os2.0系统正式版安装包下载-华为鸿蒙2.0系统手机版v2.0安卓版_289手游网下载...

    华为鸿蒙2.0系统手机版是由华为最新推出的系统,这款系统比之前的系统的更加稳定,对系统进行了深度优化,同时功能也变得更加全面了,给用户带来全新的体验方式,给用户最优质的服务,现在就赶紧来更新吧,感兴趣 ...

  6. excel手机版_微软的新办公利器,这才是手机办公该有的亚子!

    Hello 大家好,这里是工具狂人. Office 套件,也就是我们俗称的 Word .Excel.PPT等,是我们日常生活中经常要使用的软件. 在手机上,似乎只有 WPS Office 这一个 AP ...

  7. 网易我的世界手机版服务器文件在哪个文件夹,网易我的世界手机版怎么导入地图_手机版地图导入教程...

    网易我的世界手机版推出后很多玩家由于对于版本不太了解,不知道游戏中的一些操作的具体方法,有玩家想自己导入地图但是不清楚该怎么导入,今天小编大家带来一篇网易我的世界手机版的地图导入教程,一起来看吧. 导 ...

  8. 我的世界手机版javaui材质包_传奇世界中变带元神手机版下载-传奇世界中变带元神手机版正版下载v1.0...

    传奇世界中变带元神手机版是一款众多游戏平台热推的传奇手游,不定期为玩家开放超值奖池,每天签到都能领取奖励,各种时装自由装扮,超多副本让你热血天战,快来下载传奇世界中变带元神手机版试试吧,与好友沙城争霸 ...

  9. 我的世界手机版javaui材质包_传奇世界中变手机版下载-传奇世界中变手机版最新下载v1.0.1...

    传奇世界中变手机版游戏为您带来不一样的玩法乐趣,新人登录游戏即可领取专属礼包,游戏操作简单轻松,还可以进行多人竞技方便您随时邀请好友一起组队,游戏采用高清画质独特的处理器让您眼前一亮,还可以进行角色自 ...

  10. 蘑菇模拟器TV版 for Android,安卓NES模拟器TV版下载

    NES Emulator TV精选了上千款经典的红白机小游戏,我们小时候玩过的经典游戏都能够在这里找到,每一款游戏在这里都能够分别存档,没有太多时间的上班族可以尝试一下,给玩家带来最好的游戏体验. 软 ...

最新文章

  1. 【栈】【150. 逆波兰表达式求值】【中等】(需回顾)
  2. spring的事物配置
  3. Arrays.hashCode(Object [])与Objects.hash(Object…)
  4. Chapter1-2_Speech_Recognition(LAS)
  5. 2016年度最受欢迎中国开源软件评选
  6. ios-deploy out of date (1.9.4 is required). To upgrade with Brew: brew upgrade ios-deploy
  7. ArcGIS几种数据格式
  8. 【通信】基于matlab多径衰落信道仿真【含Matlab源码 338期】
  9. 量化金融笔记1-股票量化基础
  10. 计算机内存不足16g内存,加装16G内存,电脑却运行卡顿、崩溃?原来是这项设置有问题!...
  11. GSM和GPRS有什么区别
  12. 69期-Java SE-036_MySQL-7 SQL练习 -doing
  13. 微信小程序订单展示(3)
  14. office教程:如何给excel表格重命名工作表
  15. python求球的表面积_python-Hypar的表面积(双曲线抛物面)
  16. 赛灵思运行linux,玩转赛灵思Zedboard开发板(6):如何在Zedboard上运行linux下的应用程序?...
  17. 历经5年,一次业余网页游戏项目惨痛的失败经历
  18. strstr()函数c++代码实现实例及运行结果
  19. 2021到2022跨年还有多少天?可用手机便签设置跨年倒数
  20. java swing的弹窗_java Swing实现弹窗效果

热门文章

  1. 北理乐学c语言数字菱形,打印数字菱形,急啊,帮帮小女子啊。。。
  2. MySQL数据库默认的端口号是_数据库的默认端口号
  3. go程序设计语言第十章-包管理和Go工具
  4. 傲腾内存不支持linux吗,内存英特尔® 傲腾™常见问题
  5. 大学四年,我把私藏的自学「学习网站/实用工具」都贡献出来了
  6. win10壁纸不能幻灯片放映_教你巧妙解决雨林木风Win10系统中背景桌面无法自动播放幻灯片...
  7. java回调函数(callBack)
  8. java多线程百度云_654619 汪文君Java多线程编程实战
  9. 网易云音乐java爬虫_用Java实现网易云音乐爬虫
  10. xv6实验课程--系统调用