AwDataDirLock.javalock方法会对webview数据目录中的webview_data.lock文件在for循环中尝试加锁16次,注释中也说明了这么做的原因:可能出现的极端情况是一个旧进程正在被杀死时一个新的进程启动了,看来Google工程师对这个问题也很头痛;如果加锁成功会将该进程id和进程名写入到文件,如果加锁失败则会抛出异常。所以在android9.0以上检测应用是否存在多进程共用WebView数据目录的原理就是进程持有WebView数据目录中的webview_data.lock文件的锁。所以如果子进程也对相同文件尝试加锁则会导致应用崩溃。解决方案目前大部分手机会在应用崩溃时自动重启应用,猜测当手机系统运行较慢时这时就会出现注释中提到的当一个旧进程正在被杀死时一个新的进程启动了的情况。使用此方案应用上线后该问题崩溃次数减少了90%以上。

Android 解决WebView多进程崩溃的方法

Android 解决WebView多进程崩溃的方法

Android 解决WebView多进程崩溃的方法

Android 解决WebView多进程崩溃的方法

Android 解决WebView多进程崩溃的方法

Android 解决WebView多进程崩溃的方法

Android 解决WebView多进程崩溃的方法