最近在錯誤日志統計平台上看到一個WebView的報錯,這個報錯之前沒有遇到過。錯誤內容如下:
java.lang.RuntimeException Using WebView from more than one process at once with the same data directory is not supported
經過查找相關資料,發現是Android P發布的時候,對WebView相關的使用方式進行了變更:不允許多進程使用同一個目錄的WebView,需要為不同進程的WebView設置不同目錄。
可以看出來,當我們的targetSdkVersion為28及以上的時候,且需要在多進程模式下使用WebView的時候,就需要對進行相應的調整,以便正確的支持。
1.多進程WebView使用問題復現
首先需要將應用的targetSdkVersion的Api級別設置為28及以上版本。然后通過兩個處於不同進程的 Activity 分別使用 WebView 加網頁實現。
對Activity設置不同進程可以使用下面的配置方式:
<activity android:name=".TestWebViewActivity" android:process=":ProcessName" />
最后,在Android P 的真機上運行,就可以重現之前提到的錯誤。
2.多進程WebView使用問題修復
很顯然,webview的錯誤是在不同進程下導致的,也就是說Android P針對 WebView在不同進程下無法訪問非自己進程中的webview目錄。
解決這個問題,就需要兼容Android P的機制:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 修復WebView的多進程加載的bug
initWebView();
}
private void initWebView() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName();
WebView.setDataDirectorySuffix(processName);
}
}
}
本問題的示例代碼地址為:
鏈接:https://pan.baidu.com/s/1RrActtFvjQ4X9l18FMx5sQ
提取碼:p09p