欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Can‘t set data directory suffix: WebView already initialized

程序员文章站 2022-03-04 23:31:34
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