Android 9.0/P WebView 多進程使用的問題

最近在錯誤日誌統計平臺上看到一個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 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章