您的位置:首页 > 移动开发

解决用WebView去加载网页在部分手机上闪退问题

2017-09-23 17:21 1516 查看

1.绪论

Binary XML file line #29: Error inflating class android.webkit.WebView…这种错误,你见过么?最近公司应用(云电脑)在各个应用市场比较火,用的人也多,在后台统计的错误日志里,出现了个奇葩的bug,它就是WebView加载网页闪退bug。大部分出现在一加、三星、OPPO手机中,不知道大家有没有遇到过,下面是错误详细信息:

android.view.InflateException: Binary XML file line #29: Error inflating class android.webkit.WebView
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:57)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
...//由于篇幅原因,省略无关错误日志
Caused by: java.lang.UnsupportedOperationException
at com.android.webview.nullwebview.NullWebViewFactoryProvider.createWebView(NullWebViewFactoryProvider.java:41)
at android.webkit.WebView.ensureProviderCreated(WebView.java:2058)
at android.webkit.WebView.setOverScrollMode(WebView.java:2116)
at android.view.View.<init>(View.java:3461)
at android.view.View.<init>(View.java:3517)
at android.view.ViewGroup.<init>(ViewGroup.java:470)
at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:52)
at android.webkit.WebView.<init>(WebView.java:498)


下面是引用WebView的布局文件:



好可怕!WebView是系统api提供的,竟然会找不到!这个时候,好方…….

我们可能会想到手机系统出现问题了,有可能是用户刷系统了,或者用户把手机root后系统弄坏了,还有可能就是厂商定制的手机系统本身就存在问题。

2.解决思路

对于上面的猜想,归纳起来就是手机系统有问题了。我们可能想到的解决办法就是不用系统的webView,用第三方的网页加载库实现功能,比如腾讯提供的浏览器内核SDK,如果你需求只是用来加载网页,功能简单的话,这个是可行的,如果需要实现复杂的功能,那这个SDK也是会有很多坑,其中这个SDK不支持64位运行环境的。

刚猜测手机系统出现问题了,那为什么手机自带浏览器访问网页又没事呢?看来我们得去研究下自带浏览器了,我们拿出现过这个异常的手机把它root掉,然后拷出自带浏览器apk,进行反编译,查看源码…这个过程有些繁琐就不讲解了,直接说结果,结果如下:

手机自带浏览器也是用系统api的webView来实现加载网页的。

擦…你这不是在撮我么?那系统就没问题才对啊?

还没说完,别激动!

其实这个就可以说明系统还是有webView这个api的,我无意间看到手机自带浏览器的libs目录下发现没有64位库的文件夹如:arm64-v8a、mips64、x86_64,那这就说明这个应用只支持32位运行环境。由此 大概可以猜想我们应用为啥在这个手机上报错了。

首先,这个手机是支持64位的,然后我们应用也适配了64位运行环境,那我们应用就是在64位运行环境下运行,然而打开网页就报错了。

报错就说明系统提供的webView Api 只能在32位运行环境下运行,不兼容64位

那么 这问题怎么解呢?

我们可以把应用里适配的64位系统的库和目录全删掉,试试…

经过验证,是没问题的,可以正常打开网页。不过让64位系统运行32位的应用,性能会有点点损失的。

到这里分析就结束了,如果有什么疑问,欢迎留言交流!如果没有的话就给笔者点个赞呗! ^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息