多进程对于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的影响

你可能感兴趣的:(多进程对于Webview的影响:Using WebView from more than one process at once with the same data directory is ...)