问题由来:
项目中同事新开了一个进程中使用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
}