Android 9.0 WebView多進程問題

問題概述

問題描述

Android 9.0及以上版本,多進程使用WebView會引發(fā)程序崩潰。

官方說明

在 Android 9 中,為改善應用穩(wěn)定性和數據完整性,應用無法再讓多個進程共享一個 WebView 數據目錄。
如果您的應用必須在多個進程中使用 WebView 實例,則您必須先使用 WebView.setDataDirectorySuffix() 方法為每個進程指定唯一的數據目錄后綴,然后再在相應進程中使用 WebView 的給定實例。該方法會將每個進程的網絡數據放入應用數據目錄內其自己的目錄中。

解決辦法

官方文檔理解

本人對官方文檔這段說明理解如下:

  1. 在一個APP內部,存在多個進程A,B,C等都使用WebView的話,在9.0系統(tǒng)以上就會報錯,不支持同時使用多個進程中具有相同數據目錄的WebView。
  2. 解決辦法是為調用WebView的每個進程重新制定其唯一的數據目錄。

代碼示例

    private fun configWebViewCacheDirWithAndroidP() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            var processName = getProcessName()
            if (packageName != processName) {
                WebView.setDataDirectorySuffix(processName)
            }
        }
    }

備注說明

configWebViewCacheDirWithAndroidP()方法的調用需要符合如下條件,否則可能還會出錯:

  1. 一定是在進程初始化的時候調用,比如Application中進行調用
  2. 并且這行代碼需要在其他的SDK等等初始化之前就要調用
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容