问题

有一个主页面,布局里是包含的一个Webview,页面跳转进入第二个页面也会加载一个新的WebView,但新的webView加载页面不成功,加载进度走到10%就不动了也没有报错信息。

        首先出现的是主页面的webView一直加载不出来,但当时没有多想一直以为是网络的问题,杀死进程或者退出之后重新进入就恢复正常了,所以一直没有作为主要问题去解决,项目后期是想着切换成腾讯的X5webView,优化一下webView加载,发现项目首页打开正常了,正常后这个问题就放入了优化成功功能里,但其实不知道问题并没有真正的解决。后期发现了一个大问题,我们使用的声网白板标记加载不出来了,这个可是我们的主要功能呀,于是加紧排查:

排查

1、出现这个问题第一反应是我们使用的第三方出现了问题。由于我们最开始使用的是测试版,所以第一反应是我们使用的测试版本欠费了,不能使用,登录后台后发现没有欠费;

2、寻找声网技术同学帮忙排查是不是,我们创建的白板房间出现问题,或者设置的参数有问题(但这个其实不太可能因为之前的几个项目使用都是正常的,但之前都是原生开发且只有加载白板的这个webView),经过声网技术同学查询一切都是正常的,未发现有问题。

到此处开始怀疑是不是设备的问题:

3、根据设备去排查:分别使用的设备是 遨游A11对讲机、征服S29对讲机、华为P30。发现使用AndroidStudio直接运行时,华为P30正常,但是遨游A11对讲机、征服S29对讲机加载白板时均出现webView加载10%就跳出了,也没有任何的报错信息。但进行打包之后安装在设备上后一切是正常的。这里又开始怀疑是Android Studio增量运行的问题。

4、怀疑是Android Studio增量运行问题后,我又清除缓存运行Android Studio,重新安装Android Studio,找了新电脑重新运行都不行。到这里可以确认是设备造成的。

5、然后在网上开始各种扒资料,首先找到了同样问题的帖子,

资料:Android webview只加载10%且出现白屏问题排查解决_Johngo学长

Android WebView 进度卡住10%不动,页面空白,页面无反应,不报错。_一个小小的程序员11的博客-CSDN博客_webview 10%

但发现我里面并没有上述所说的问题,于是开始继续寻找,这时突然想到我的项目中同时加载了两个WebView,主页面和我的标注页面,于是开始怀疑是否是因为多Activity加载webView引起的冲突导致的。于是又在网上开始各种翻资料,终于找到了

关于连续打开多个包含WebView的Activity出现空白加载不出来的bug的解决方案_ShownXeu潇栩的博客-CSDN博客_多个webview同时存在加载不出页面

6、开始排查,把首页的webView禁掉,只加载一个白板的webView,发现还是加载不出来,但这个时候一直觉得是双webView引起的,所以怀疑是缓存的问题。所以直接卸载软件发现重新安装后,嘿~正常了。欢呼~欢呼~毕竟到这里已经排查了两天了。然而重新跑一次程序又出现了。于是尝试直接进入了应用信息里,清除掉缓存,在回到应用发现加载成功了。这么一来就一直认为是缓存的问题,一定是。所以就此落坑开始了两天的清除缓存排查;使用代码在每次关闭页面打开页面均清除一次webView所有记录,清除手机所有浏览器记录。均发现不行。到这里我已经泄气了开始再找能不能使用项目跳转到应用详情页面用户手动清除一次缓存之后在开始使用(很显然这里我已经开始抓瞎了),但是让我崩溃的是,直接跳转进入清除缓存后还是不行。

7、然后又发现每次杀死进程后进入设备肯定是正常的,且有一段时间会都是正常的。到这里又开始找杀死进程后点击项目ICON图标是怎样的流程。跟设备直接在androidStudio上run的区别。

深入浅出Android中的App启动流程分析_左手木亽的博客-CSDN博客

然而还是没有解决问题。

8、到这里开始想是不是能把声网的webView也改成X5WebView,于是开始在开始更换使用的第三方插件:

https://github.com/netless-io/DSBridge-Android
https://github.com/netless-io/whiteboard-android

然而这个换上之后直接跑demo发现还是不行,完蛋了~~这里开始无限崩溃了~~~~~~开始怀疑到底是哪里的问题,为什么首页加载都是成功的但是白板这个始终都不能成功呢。

呀~~~~~~~~~~~~~~~呀~~~~~~~~~~~呀~~~~~~~~~~~呀~~~~~~~~~

好吧。收拾心情重新出发。那就从原点开始解决。使用X5WebView的demo开始运行,发现这里也不能使用。好勒,那就从这里开始解决问题。

9、仔细看日志发现有一个报错信息。欢呼~~~~~~终于看到的为啥出错的信息了:

X5核心接入: TBS:initX5Core bmttwebview.so is 32-bit instead of 64-bit 问题解决方案

这里基本开始就怀疑是不同的浏览器内核或者cpu出现的问题,然后看到了这片文章

解决方案:

现在市面上常见的CPU架构类型如下:

1、armeabi-v7a: 第7代及以上的 32位ARM 处理器

2、arm64-v8a: 第8代、64位ARM处理器

3、armeabi: 第5代、第6代的32位ARM处理器,早期的手机在使用,现在基本很少了。

4、x86: Intel 32位处理器,在平板、模拟器用得比较多。

5、x86_64: Intel 64位处理器,在平板、模拟器用得比较多。

这里就开始有了一些思路了,首先 ndk {abiFilters "armeabi" },加入后,哈哈,X5WebView 运行正常。哈哈哈哈,首战告捷。然后开始同样的解决方式,哈哈,白板的webView整个运行正常。哈哈哈,仿佛已经胜利。

10、将白板的webView修改为X5WebView,然后还是不行。怎么会呢?各个不能运行的问题都解决了呀,咋还是出现了问题呢。对了,还有同时运行两个webView的问题,于是添加了

mWhiteView.onResume();
mWhiteView.resumeTimers();

终于一切成功了!!!!!!!!!

总结本次修改:

1、mWhiteView.onResume();    mWhiteView.resumeTimers();

2、ndk {abiFilters "armeabi" }

3、修改为X5WebView

遗留问题:目前遗留问题不清楚为什么系统的WebView为啥不能加载出来,等后期有时间接着排查

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐