近期在项目上遇到了webview崩溃的问题,出现在app版本迭代之后。崩溃log如下:

05-26 13:58:52.961 7085-7085/com.printer.tool E/AndroidRuntime: FATAL EXCEPTION: main    Process: com.printer.tool, PID: 7085    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.printer.tool/com.example.testapplication.MainActivity}: android.view.InflateException: Binary XML file line #103: Error inflating class android.webkit.WebView        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)        at android.app.ActivityThread.access$800(ActivityThread.java:151)        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)        at android.os.Handler.dispatchMessage(Handler.java:102)        at android.os.Looper.loop(Looper.java:135)        at android.app.ActivityThread.main(ActivityThread.java:5254)        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:902)        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)     Caused by: android.view.InflateException: Binary XML file line #103: Error inflating class android.webkit.WebView        at android.view.LayoutInflater.createView(LayoutInflater.java:633)        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)        at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)        at android.view.LayoutInflater.inflate(LayoutInflater.java:504)        at android.view.LayoutInflater.inflate(LayoutInflater.java:414)        at android.view.LayoutInflater.inflate(LayoutInflater.java:365)        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)        at com.example.testapplication.MainActivity.onCreate(MainActivity.java:116)        at android.app.Activity.performCreate(Activity.java:6033)        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)?        at android.app.ActivityThread.access$800(ActivityThread.java:151)?        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)?        at android.os.Handler.dispatchMessage(Handler.java:102)?        at android.os.Looper.loop(Looper.java:135)?        at android.app.ActivityThread.main(ActivityThread.java:5254)?        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:902)?        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)?     Caused by: java.lang.reflect.InvocationTargetException        at java.lang.reflect.Constructor.newInstance(Native Method)        at java.lang.reflect.Constructor.newInstance(Constructor.java:288)        at android.view.LayoutInflater.createView(LayoutInflater.java:607)        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)?        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)?        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)?        at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)?        at android.view.LayoutInflater.inflate(LayoutInflater.java:504)?        at android.view.LayoutInflater.inflate(LayoutInflater.java:414)?        at android.view.LayoutInflater.inflate(LayoutInflater.java:365)?        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)?        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)?        at com.example.testapplication.MainActivity.onCreate(MainActivity.java:116)?        at android.app.Activity.performCreate(Activity.java:6033)?        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)?        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)?        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)?        at android.app.ActivityThread.access$800(ActivityThread.java:151)?        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)?        at android.os.Handler.dispatchMessage(Handler.java:102)?        at android.os.Looper.loop(Looper.java:135)?        at android.app.ActivityThread.main(ActivityThread.java:5254)?        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:902)?        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)?     Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003        at android.content.res.Resources.getText(Resources.java:299)        at android.content.res.Resources.getString(Resources.java:385)        at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:684)        at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:608)        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.

从log看是有webview资源未找到。

分析与验证:

1.app调用webview的代码没有变化,说明调用逻辑本身没有问
题,但是webview所在的Activity由继承自Activity变成了继承自AppCompatActivity
2.可能是webview app太老旧,尝试安装新版本,实测问题解决


PS:
有一些文章提供的方法是自定义webview,根据版本返回不同的context,但是这个方法仅限于app层面,从系统层面而言,还是需要修改webview app。

google android源码自带的webview app分别如下:

点这里->7.1

点这里->8.0

点这里->9.0

点这里->10

更多相关文章

  1. Android(安卓)网络框架初探
  2. 浅入浅出Android(014):HTTP GET获取文本内容
  3. 学习Android闹钟源代码(三)-AlarmClock类分析(part2)
  4. Android(安卓)动画AlphaAnimation类方法
  5. android tabHost使用
  6. Android(安卓)2.3新增API - DownloadManager
  7. Android(安卓)stutdio2.2 启动模拟器出现“/dev/kvm is not foun
  8. 【OkHttp3源代码分析】(一)Request的execute
  9. Android(安卓)Launcher 详解

随机推荐

  1. Android中关于Handler looper参数设置问
  2. android中editText保留小数点后两位
  3. android之模拟时钟和数字时钟,计时器
  4. ios、Android、java通用AES加密方式
  5. android中的StatFs类
  6. 31、Android获取meta-data和build.gradle
  7. Cordova 3.x 入门 - 目录
  8. 使用Android常用控件与布局实现美观的登
  9. android 通讯录
  10. android使用App Link或者URL Scheme直接