在Andrid P以上的系统中,如果使用了多个进程,而且在这些进程中使用到了webview,那么你可能遇到下面的异常提示

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

java.lang.RuntimeException: Using WebView from more than one process at once with the same data directory is not supported. https://crbug.com/558377at org.chromium.android_webview.AwBrowserProcess.b(PG:12)at n6.m(PG:33)at m6.run(PG:2)at org.chromium.base.task.TaskRunnerImpl.g(PG:11)at Nt.run(Unknown Source:2)at android.os.Handler.handleCallback(Handler.java:873)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:207)at android.app.ActivityThread.main(ActivityThread.java:6878)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876)

这个错误有可能导致app崩溃退出。

原因就是Android P以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView

谷歌官方也是给了解决方法,就是给不同的进程中的webview设置不同的数据目录

在Applicationd类的onCreate或者onBaseContextAttached方法中加入

public void onBaseContextAttached(Context base) {super.onBaseContextAttached(base);initWebViewDataDirectory(this);
}/**
* 得到进程名称
* @param context
* @return
*/
public static String getProcessName(Context context) {try {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;}}} catch (Exception e) {e.printStackTrace();}return null;
}/**
* 为webView设置目录后缀
* @param context
*/
@RequiresApi(api = Build.VERSION_CODES.P)
public static void initWebViewDataDirectory(Context context) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {String processName = getProcessName(context);if (!context.getPackageName().equals(processName)) {//判断是否是默认进程名称WebView.setDataDirectorySuffix(processName);}}
}

写在最后,如果非必要,不要在多进程中使用webview,也尽量少修改webview的datadirectory,只在主进程初始化浏览器,否则高版本中多进程初始化webview会crash

Android上多进程中使用webview的问题相关推荐

  1. 多进程android webview,Android上多进程中使用webview的问题

    在Andrid P以上的系统中,如果使用了多个进程,而且在这些进程中使用到了webview,那么你可能遇到下面的异常提示 java.lang.RuntimeException: Using WebVi ...

  2. Unity程序在VR一体机(Android)上卡死(闪退)后怎么办?——用adb查看android上某Unity app的debug信息

    一.之前面临的困境 Unity的程序build到android一体机后,仿佛进入了一个黑箱子,你既看不到脚本的debug报错信息,也看不到任务管理器里的内存和CPU使用情况?如果黑屏.闪屏.花屏怎么办 ...

  3. android webview详情,Android中的WebView详细介绍

    Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页. 2. 使用方法: (1).实例化 ...

  4. android动态设置错误页面,Android中替换WebView加载网页失败时的页面

    我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...

  5. android 调用java类_Android中在WebView里实现Javascript调用Java类的方法

    搜索热词 为了方便网页和Android应用的交互,Android系统提供了WebView中JavaScript网页脚本调用Java类方法的机制.只要调用addJavascriptInterface方法 ...

  6. Android上webview界面切换动画效果

    使用Android上的webview控件时需要跳转到下一个html时,要求当前界面缓缓的向左移动,下一个html界面缓缓的从右边出现.这与常规动画不同,一般方式将无法制作出动画.主要实现方法可以先保存 ...

  7. Android中获取WebView加载的html中console.log输出的内容

    场景 Android中使用WebView加载本地html并支持运行JS代码和支持缩放: Android中使用WebView加载本地html并支持运行JS代码和支持缩放_BADAO_LIUMANG_QI ...

  8. android 上传html文件大小,浅谈关于Android WebView上传文件的解决方案

    我们在开发需求的时候,难免会接入一下第三方的H5页面,有些H5页面是具有上传照片的功能,Android 中的 WebView是不能直接打开文件选择弹框的 接下来我讲简单提供一下解决方案,先说一下思路 ...

  9. Android中的webview详细使用

    webview向html传递参数 方式一  通过 cookie传参 CookieSyncManager.createInstance(this);CookieManager cookieManager ...

最新文章

  1. 窗口不小心拉到任务栏下面,窗口无法拖回桌面的解决办法
  2. 【Python】format()中槽的嵌套以及range()函数用法
  3. boost::mpl::string相关的测试程序
  4. linux勒索病毒名称,Linux 也有加密勒索病毒了,也有人真的中了
  5. 如何获取Google地图API密钥?(翻译版)
  6. 无人机图像处理工具更新——多线程优化版
  7. java空心三角形_java经典算法_019打印三角形(空心,实心)
  8. 选择 GCD 还是 NSTimer ?
  9. 使用EF.Core将同一模型映射到多个表
  10. python处理大数据越来越慢_请问使用JdbcTemplate读取大数据很慢如何优化?(十几万数据)...
  11. 使用跟踪和调试进行条件编译
  12. mysql 113_Centos 下 can't connect mysql server 113
  13. Reporting Services Internal Error(诡异的问题)-【转载】
  14. 【物理应用】基于matlab非序贯蒙特卡洛法评估风电系统【含matlab源码 766期】
  15. python第三项开始每一项都等于前两项的积_Python二十九个常见的脚本汇总!
  16. 趋势软件卸载去除密码提示
  17. cortex系列处理器排行_ARM Cortex-M 处理器家族介绍和比较-控制器/处理器-与非网...
  18. golang并发编程之Ticker
  19. forest_train训练文件的生成代码
  20. SQL语句常见面试题(一)

热门文章

  1. 35岁的程序员:第30章,表白
  2. python对文件的写作方法_python读写csv文件 - 作文写作问答 - 归教作文网
  3. Spring JMS CLIENT_ACKNOWLEDGE
  4. 步进电机基础(2.1)- 定子相数的分类、结构、原理
  5. 这儿有你所需要的所有关于科研的网址
  6. java如何实现系统定位_如何快速定位到系统中某一功能的具体实现
  7. WPS 2010 页眉下方添加下划线
  8. Android 9 wifi PNO 扫描
  9. 2010全球最值得模仿的230个网站
  10. 用c语言写一个求和的程序,C语言实现两数求和