【bug】Android10 WebView在多進(jìn)程中的使用

在android10以后,為了確保網(wǎng)絡(luò)數(shù)據(jù)的安全,對(duì)WebView在多進(jìn)程中的使用做了限制,每個(gè)進(jìn)程只能訪(fǎng)問(wèn)自己的網(wǎng)絡(luò)數(shù)據(jù),如Cookie,緩存,數(shù)據(jù)庫(kù)等等。所以需要為每個(gè)進(jìn)程制定數(shù)據(jù)存儲(chǔ)目錄。

錯(cuò)誤信息

java.lang.RuntimeException: Using WebView from more than one process at once with the same data directory is not supported. https://crbug.com/558377 : Current process

解決辦法

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    //必須放在這里
    fixWebViewMultiProcessCrashBug(base);
}

//Android P 以及之后版本不支持同時(shí)從多個(gè)進(jìn)程使用具有相同數(shù)據(jù)目錄的WebView
//為其它進(jìn)程webView設(shè)置目錄
private void fixWebViewMultiProcessCrashBug(Context context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        //為每個(gè)進(jìn)程設(shè)置數(shù)據(jù)目錄
        String processName = getProcessName(context);
        WebView.setDataDirectorySuffix(processName);
    }
}

private 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;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容