問題概述
問題描述
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等等初始化之前就要調用
作者:葬星隕夢
鏈接:https://www.jianshu.com/p/b154dcecd1fd
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。