多进程对于Webview的影响:Using WebView from more than one process at once with the same data directory is ...

问题由来:

项目中同事新开了一个进程中使用Webview,然后在其中一次更新版本时Google的依赖库有初始化Webview的操作,之前没有遇到过这样的问题,也没有针对性的优化,所以就造成了两个进程使用具有相同数据目录的WebView,所以在使用webview的时候就导致程序崩溃。

问题描述:
两个进程使用具有相同数据目录的WebView
Caused by: java.lang.RuntimeException: 
Using WebView from more than one process at once 
with the same data directory is not supported
问题解决:

因为公司项目都是kotlin写的,所以这个解决代码也是kotlin的形式

//Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView
    //为其它进程webView设置目录

    @RequiresApi(api = 28)
    fun webViewSetPath(context: Context?) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            val processName = getProcessName(context)
            if (Utilities.getApplicationName() != processName) {//判断不等于默认进程名称
                WebView.setDataDirectorySuffix(processName)
            }
        }
    }

    private fun getProcessName(context: Context?): String? {
        if (context == null) return null
        val manager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        val processInfo = manager.runningAppProcesses
        processInfo.forEach {
            if (it.pid == android.os.Process.myPid()) {
                return it.processName
            }
        }
        return null
    }
参考

Android 9.0及以上版本中,关于多进程问题对于WebView的影响

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,148评论 1 32
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,452评论 0 9
  • 文章转载地址 //www.greatytc.com/p/c33128fb86dc文章中有些内容是借鉴《K...
    zelo阅读 1,659评论 0 0
  • 最幸福的就是我啦,感赏早上自然醒了之后,电水壶烧热水喝,喉咙好些了。夜里喉咙痛的吐沫也不能吞,现在喝喝热开水好多啦...
    张嘉芮同阅读 146评论 0 0
  • 上学期运气很好的过了四级,这学期没什么大目标,就想提升一点自己的英语水平,所以选择了六级的考试,但到目前为止,看到...
    駣鮶阅读 183评论 0 0