Android 9.0及以上版本中,關於多進程問題對於WebView的影響

"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等等初始化之前就要調用,否則會報其他的錯誤。

這個坑,你需要認真對待!

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