美文网首页
Android WebView 5.x 系统下 Resource

Android WebView 5.x 系统下 Resource

作者: 会撒娇的犀犀利 | 来源:发表于2019-10-16 11:27 被阅读0次

    最近线上后台发现一个崩溃问题,在Android5.x上,创建webview时会发生carsh,报错信息:

    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系统不会出现。

    解决办法一

    在Android5.x上通过解决自定义WebView

    网上大部分都是这种方式解决的。

    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.

    解决方法二

    如果项目中使用"androidx.appcompat:appcompat:1.1.0" ,替换为"androidx.appcompat:appcompat:1.0.2"

    1.1.0版本webview在Android5.x上有问题,恢复到1.0.2之后确实解决了此问题,目前没有具体追踪,后续会跟上。

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

    "androidx.appcompat:appcompat:1.1.0"发布时间:2019/09/05,到现在更新一个月时间~

    "androidx.appcompat:appcompat:1.0.2"发布时间:2018/10/07,到现在更新一年时间~

    为了保证项目稳定,build gradle依赖更新时间要适当。

    最后,希望此篇博客对大家有所帮助,欢迎提出问题及建议共同探讨,如有兴趣可以关注我的博客,谢谢!

    相关文章

      网友评论

          本文标题:Android WebView 5.x 系统下 Resource

          本文链接:https://www.haomeiwen.com/subject/eivymctx.html