Can‘t set data directory suffix: WebView already initialized
程序员文章站
2022-06-23 14:15:00
Can’t set data directory suffix: WebView already initialized问题原因顾名思义webview已初始化可是为什么会出现这个呢,发现这个是android9.0才会报错。报错提示告诉我我的Application文件中onCreate()方法中调用的广告sdk初始化报错。发现sdk初始化时获取userAgent的时候调用了WebSettings.getDefaultUserAgent(context) 会初始化webview。可Application...
Can’t set data directory suffix: WebView already initialized
问题原因
顾名思义webview已初始化
可是为什么会出现这个呢,发现这个是android9.0才会报错。报错提示告诉我我的Application文件中onCreate()方法中调用的广告sdk初始化报错。发现sdk初始化时获取userAgent的时候调用了WebSettings.getDefaultUserAgent(context) 会初始化webview。
可Application在打开app的时候就运行了,我进入app首页了才报错很奇怪。最终发现我竟然开了两个进程,那就意味着Application跑了两次,WebSettings.getDefaultUserAgent(context) 就执行了两次,然后就出现了webview已初始化。
问题分析
为什么会出现出现两个进程呢?
然后我就打开了我自己多个项目开始尝试,最终发现我接了推送的项目都会开启一个新的进程 ,没接推送的就一个进程。
问题解决
在调用WebSettings.getDefaultUserAgent(context) 之前做一个判断就好了
String processName = getProcessName(appContext);
String packageName = appContext.getPackageName();
if (!packageName.equals(processName)) {
WebView.setDataDirectorySuffix(processName);
} eles {
//内容初始化
}
private 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;
}
第一次记录自己遇到的错误和解决方法,记下来后感觉自己对这个对记录更深了!good!!
参考了http://www.cocoachina.com/articles/74902
本文地址:https://blog.csdn.net/qq_40951725/article/details/108865224