专栏首页技术小黑屋修复WebView资源未找到导致的崩溃问题

修复WebView资源未找到导致的崩溃问题

近期 应用新增了很多的崩溃,分析特征,发现崩溃集中在5.0-5.1.1系统上,崩溃的日志如下

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)

at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:123)

at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:110)

at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144)

at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:107)

at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:261)

at android.webkit.WebView.<init>(WebView.java:554)

at android.webkit.WebView.<init>(WebView.java:489)

at android.webkit.WebView.<init>(WebView.java:472)

at android.webkit.WebView.<init>(WebView.java:459)

at com.tencent.smtt.sdk.WebView$a.<init>(WebView.java:2968)

at com.tencent.smtt.sdk.WebView.<init>(WebView.java:567)

at com.tencent.smtt.sdk.WebView.<init>(WebView.java:329)

at com.tencent.smtt.sdk.WebView.<init>(WebView.java:323)

at com.tencent.smtt.sdk.WebView.<init>(WebView.java:318)

at com.tencent.smtt.sdk.WebView.<init>(WebView.java:313)

at com.xxxx.webview.X5WebView.<init>(X5WebView.java:36)

at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)

at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)

at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)

at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)

at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)

at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)

at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)

at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)

at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)

at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2663)

at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManagerImpl.java:2613)

at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:246)

at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:542)

at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)

at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1245)

at android.app.Activity.performStart(Activity.java:6099)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2367)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2466)

at android.app.ActivityThread.access$900(ActivityThread.java:175)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:135)

at android.app.ActivityThread.main(ActivityThread.java:5418)

at java.lang.reflect.Method.invoke(Native Method)

at java.lang.reflect.Method.invoke(Method.java:372)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)

貌似感觉没有解决办法,后来在这里https://stackoverflow.com/a/58695635 找到了解决办法

解决方法

  • 针对出问题的系统(5.0-5.1.1)使用ApplicationContext 处理
object WebViewWorkaroundAssistant {



    fun getWorkaroundContext(context: Context): Context {

        //修复Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003

        //https://stackoverflow.com/a/58695635

        return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {

            context.applicationContext

        } else {

            context

        }

    }

}





  public X5WebView(Context context) {

        super(WebViewWorkaroundAssistant.INSTANCE.getWorkaroundContext(context));

        initUI();

    }

注意事项

  • 当再次使用WebView.getContext时,得到的就是Application 上下文,而不是Activity的了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 携程机票Sketch插件开发实践

    Sketch 是伴随移动应用程序崛起而流行的 UI 设计工具。2014年 Sketch V3 增加 Symbols 功能,在 UI 设计工具领域的优势越来越大。...

    携程技术
  • 18.6.3日报

    2,修复electron模式加载keymapping.node崩溃的问题。原因是default uv loop是在主线程最先调用。这个应该在node线程先调用才...

    龙泉寺扫地僧
  • JavaFX 11发行说明

    以下记录描述了有关此版本的重要更改和信息。在某些情况下,该说明提供了有关问题或更改的其他详细信息的链接。

    gemron的空间
  • vivo web service:亿万级规模web服务引擎架构

    vivo web service是开发团队围绕奇点内核打造出的基于vivo手机平台的web服务引擎,该服务引擎从浏览器产品线中经过多年迭代而出。除了提供可靠的基...

    2020labs小助手
  • iOS学习巩固笔记-UIWebView/JavaScript

    2016-05-0908:24:25 发表评论 0℃热度 写一些平时看书学习iOS的笔记,基础的、进阶的都有,供以后回顾,也可以让刚开始学习的同学学习。 ? ...

    timhbw
  • 使用 React Native 重写大型 Ionic 应用后,我们想分享一下这八个经验

    本文的内容是关于 React Native 重写的经验分享,基于 React Native 重写 Ionic 应用Growth 过程中遇到的一些坑。 Growt...

    Phodal
  • 错误——持续更新

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • miniblink每日最新下载地址

    龙泉寺扫地僧
  • H5小游戏的坑点小结

    1) iOS 9.1 的safari中,在onTouchBegan方法中调用cc.audioEngine.playEffect播放音效是没有效果的,如果在onT...

    meteoric

扫码关注云+社区

领取腾讯云代金券