"Android P 以及之後版本不支持同時從多個進程使用具有相同數據目錄的WebView"
以上爲官方給出的說明,用白話來說就是,一個app中,如果有多個進程A、B、C,並且在A、B、C進程都是用到WebView的話,在Android P 以及之後的版本中運行會報錯:
Caused by: java.lang.RuntimeException: Using WebView from more than one process at once with the same data directory is not supported. https://crbug.com/558377
這行代碼翻譯過來的意思就是:不支持同時使用多個進程中具有相同數據目錄的WebView。
針對這個問題,谷歌也給出瞭解決方案,代碼很簡單:在初始化的時候,需要爲其它進程webView設置目錄
//Android P 以及之後版本不支持同時從多個進程使用具有相同數據目錄的WebView
//爲其它進程webView設置目錄
@RequiresApi(api = 28)
public void webviewSetPath(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName(context);
if (!MainProcessName.equals(processName)) {//判斷不等於默認進程名稱
WebView.setDataDirectorySuffix(processName);
}
}
}
public String getProcessName(Context context) {
if (context == null) return null;
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
if (processInfo.pid == android.os.Process.myPid()) {
return processInfo.processName;
}
}
return null;
}
webviewSetPath()的調用一定是在進程初始化的時候調用,比如Application中進行調用,並且這行代碼需要在其他的SDK等等初始化之前就要調用,否則會報其他的錯誤。
這個坑,你需要認真對待!