Android WebView 5.x 系統下 Resources$NotFoundException異常處理

最近線上後臺發現一個崩潰問題,在Android5.x上,建立webview時會發生carsh,報錯信息:java

 

Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003
    at android.content.res.Resources.getText(Resources.java:318)
    at android.content.res.VivoResources.getText(VivoResources.java:123)
    at android.content.res.Resources.getString(Resources.java:404)
    at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:694)
    at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:618)
    at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:631)
    at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:780)
    at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:619)
    at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:556)
    at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:312)
    at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:96)
    at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:264)

在大部分的vivo 5.x系統下會出現問題,非5.x系統不會出現。android

解決辦法一

在Android5.x上經過解決自定義WebViewweb

網上大部分都是這種方式解決的。app

 

public class LollipopFixedWebView extends WebView {
    public LollipopFixedWebView(Context context) {
        super(getFixedContext(context));
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs) {
        super(getFixedContext(context), attrs);
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(getFixedContext(context), attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(getFixedContext(context), attrs, defStyleAttr, defStyleRes);
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) {
        super(getFixedContext(context), attrs, defStyleAttr, privateBrowsing);
    }

    public static Context getFixedContext(Context context) {
        if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT < 23) // Android Lollipop 5.0 & 5.1
            return context.createConfigurationContext(new Configuration());
        return context;
    }
}

主要核心方法是getFixedContext(context),根據版本號配置不一樣的context.gradle

解決方法二

若是項目中使用"androidx.appcompat:appcompat:1.1.0" ,替換爲"androidx.appcompat:appcompat:1.0.2"ui

1.1.0版本webview在Android5.x上有問題,恢復到1.0.2以後確實解決了此問題,目前沒有具體追蹤,後續會跟上。google

官方文檔:https://developer.android.google.cn/jetpack/androidx/releases/appcompat?hl=zh-cnspa

"androidx.appcompat:appcompat:1.1.0"發佈時間:2019/09/05,到如今更新一個月時間~code

"androidx.appcompat:appcompat:1.0.2"發佈時間:2018/10/07,到如今更新一年時間~ip

爲了保證項目穩定,build gradle依賴更新時間要適當。

相關文章
相關標籤/搜索