小米安卓java模拟器手机版_Android P(9.0) 行为变更完美适配WebView(小米手机也适用)...
最近在后台发现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(小米手机也适用)...相关推荐
- java模拟器游戏要钱吗_安卓java模拟器(安卓手机如何玩JAVA游戏以及JAVA软件的方法)...
首先最简单的方法就是JAVA模拟器,但是由于JAVA模拟器的兼容性并不是太好而导致部分(挺大部分的)机型无法使用.所以就有了第二个方法,那就是PSP模拟器,因为PSP上是有JAVA模拟器的,所以就可以 ...
- 安卓java模拟器_用大白话告诉你:Java 后端到底是在做什么?
作者:黄小斜 阅读本文大概需要 6 分钟. 新手程序员通常会走入一个误区,就是认为学习了一门语言,就可以称为是某某语言工程师了.但事实上真的是这样吗?其实并非如此. 今天我们就来聊一聊,Java 开发 ...
- 有没有安卓4.0的java模拟器_电脑端安装Android4.0模拟器使用教程
如今说到什么智能手机最火,那很多人肯定会说android系统的手机.如果你还没有Android手机,又想买一部试试,可是价格都不便宜,买来不适合自己怎么办?那么可以先在电脑上安装一个Android模拟 ...
- python编辑器安卓手机版_python编译器安卓下载-python编译器手机版下载v1.8.0 安卓版-2265安卓网...
python编译器手机版是一款超棒的编程工具.专业的编程内容设计,多种多样的语言选择,完美的脚本,强大的功能,没有任何广告,快速的编写,还有快速提示,自由复制等等! python编译器安卓软件介绍 - ...
- 华为鸿蒙os手机版,华为鸿蒙os2.0系统正式版安装包下载-华为鸿蒙2.0系统手机版v2.0安卓版_289手游网下载...
华为鸿蒙2.0系统手机版是由华为最新推出的系统,这款系统比之前的系统的更加稳定,对系统进行了深度优化,同时功能也变得更加全面了,给用户带来全新的体验方式,给用户最优质的服务,现在就赶紧来更新吧,感兴趣 ...
- excel手机版_微软的新办公利器,这才是手机办公该有的亚子!
Hello 大家好,这里是工具狂人. Office 套件,也就是我们俗称的 Word .Excel.PPT等,是我们日常生活中经常要使用的软件. 在手机上,似乎只有 WPS Office 这一个 AP ...
- 网易我的世界手机版服务器文件在哪个文件夹,网易我的世界手机版怎么导入地图_手机版地图导入教程...
网易我的世界手机版推出后很多玩家由于对于版本不太了解,不知道游戏中的一些操作的具体方法,有玩家想自己导入地图但是不清楚该怎么导入,今天小编大家带来一篇网易我的世界手机版的地图导入教程,一起来看吧. 导 ...
- 我的世界手机版javaui材质包_传奇世界中变带元神手机版下载-传奇世界中变带元神手机版正版下载v1.0...
传奇世界中变带元神手机版是一款众多游戏平台热推的传奇手游,不定期为玩家开放超值奖池,每天签到都能领取奖励,各种时装自由装扮,超多副本让你热血天战,快来下载传奇世界中变带元神手机版试试吧,与好友沙城争霸 ...
- 我的世界手机版javaui材质包_传奇世界中变手机版下载-传奇世界中变手机版最新下载v1.0.1...
传奇世界中变手机版游戏为您带来不一样的玩法乐趣,新人登录游戏即可领取专属礼包,游戏操作简单轻松,还可以进行多人竞技方便您随时邀请好友一起组队,游戏采用高清画质独特的处理器让您眼前一亮,还可以进行角色自 ...
- 蘑菇模拟器TV版 for Android,安卓NES模拟器TV版下载
NES Emulator TV精选了上千款经典的红白机小游戏,我们小时候玩过的经典游戏都能够在这里找到,每一款游戏在这里都能够分别存档,没有太多时间的上班族可以尝试一下,给玩家带来最好的游戏体验. 软 ...
最新文章
- 【栈】【150. 逆波兰表达式求值】【中等】(需回顾)
- spring的事物配置
- Arrays.hashCode(Object [])与Objects.hash(Object…)
- Chapter1-2_Speech_Recognition(LAS)
- 2016年度最受欢迎中国开源软件评选
- ios-deploy out of date (1.9.4 is required). To upgrade with Brew: brew upgrade ios-deploy
- ArcGIS几种数据格式
- 【通信】基于matlab多径衰落信道仿真【含Matlab源码 338期】
- 量化金融笔记1-股票量化基础
- 计算机内存不足16g内存,加装16G内存,电脑却运行卡顿、崩溃?原来是这项设置有问题!...
- GSM和GPRS有什么区别
- 69期-Java SE-036_MySQL-7 SQL练习 -doing
- 微信小程序订单展示(3)
- office教程:如何给excel表格重命名工作表
- python求球的表面积_python-Hypar的表面积(双曲线抛物面)
- 赛灵思运行linux,玩转赛灵思Zedboard开发板(6):如何在Zedboard上运行linux下的应用程序?...
- 历经5年,一次业余网页游戏项目惨痛的失败经历
- strstr()函数c++代码实现实例及运行结果
- 2021到2022跨年还有多少天?可用手机便签设置跨年倒数
- java swing的弹窗_java Swing实现弹窗效果
热门文章
- 北理乐学c语言数字菱形,打印数字菱形,急啊,帮帮小女子啊。。。
- MySQL数据库默认的端口号是_数据库的默认端口号
- go程序设计语言第十章-包管理和Go工具
- 傲腾内存不支持linux吗,内存英特尔® 傲腾™常见问题
- 大学四年,我把私藏的自学「学习网站/实用工具」都贡献出来了
- win10壁纸不能幻灯片放映_教你巧妙解决雨林木风Win10系统中背景桌面无法自动播放幻灯片...
- java回调函数(callBack)
- java多线程百度云_654619 汪文君Java多线程编程实战
- 网易云音乐java爬虫_用Java实现网易云音乐爬虫
- xv6实验课程--系统调用