问题概述
问题描述
Android 9.0及以上版本,多进程使用WebView会引发程序崩溃。
官方说明
在 Android 9 中,为改善应用稳定性和数据完整性,应用无法再让多个进程共享一个 WebView 数据目录。
如果您的应用必须在多个进程中使用 WebView 实例,则您必须先使用 WebView.setDataDirectorySuffix()
方法为每个进程指定唯一的数据目录后缀,然后再在相应进程中使用 WebView 的给定实例。该方法会将每个进程的网络数据放入应用数据目录内其自己的目录中。
解决办法
官方文档理解
本人对官方文档这段说明理解如下:
- 在一个APP内部,存在多个进程A,B,C等都使用WebView的话,在9.0系统以上就会报错,不支持同时使用多个进程中具有相同数据目录的WebView。
- 解决办法是为调用WebView的每个进程重新制定其唯一的数据目录。
代码示例
private fun configWebViewCacheDirWithAndroidP() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
var processName = getProcessName()
if (packageName != processName) {
WebView.setDataDirectorySuffix(processName)
}
}
}
备注说明
configWebViewCacheDirWithAndroidP()方法的调用需要符合如下条件,否则可能还会出错:
- 一定是在进程初始化的时候调用,比如Application中进行调用
- 并且这行代码需要在其他的SDK等等初始化之前就要调用