android开发分享Can‘t set data directory suffix: WebView already initialized

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!!
参考了https://www.cocoachina.com/articles/74902

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/892470.html

(0)
上一篇 2021年10月20日
下一篇 2021年10月20日

精彩推荐