Caused by: java.lang.RuntimeException: Using WebView from more than one process at once with the...
程序员文章站
2022-03-08 15:46:34
最近帮一个内部的项目解决问题,他们在多进程使用webview的时候碰到了崩溃问题问题:Caused by: java.lang.RuntimeException: Using WebView from more than one process at once with the same data directory is not supported原因:Android 9 prohibit sharing WebView data directory among multiple pr...
最近帮一个内部的项目解决问题,他们在多进程使用webview的时候碰到了崩溃问题
问题:
Caused by: java.lang.RuntimeException: Using WebView from more than one process at once with the same data directory is not supported
原因:
Android 9 prohibit sharing WebView data directory among multiple processes
add below code in your mainApplication file
因为Android P行为变更,不可多进程使用同一个目录webView,需要为不同进程webView设置不同目录
解决方法:
为不同进程设置不同的目录即可解决问题
虽然在程序运行阶段有很多时间去为其他子进程的webview去设置目录,但是需要处理好一个进程里只能设置一次,否则会出现以下报错导致崩溃
Using WebView from more than one process at once with the same data directory is not supported
所以最终的解决方法是建议在application里的attachBaseContext或onCreate去做设置,来让进程子进程只执行一次【有小伙伴在四大组件里去设置,搞不好就会被多次执行】
public static void dealH5DataDirectory(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// 安卓9.0后不允许多进程使用同一个数据目录
try {
WebView.setDataDirectorySuffix("进程名");
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 获取当前进程名
* @return 进程名
*/
public static String getCurrentProcessName(Context context) {
int pid = android.os.Process.myPid();
ActivityManager mActivityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo appProcess : mActivityManager
.getRunningAppProcesses()) {
if (appProcess.pid == pid) {
return appProcess.processName;
}
}
return null;
}
本文地址:https://blog.csdn.net/qq_35559358/article/details/111030552