问题:
从一个webview页面跳转到另一个包含webview的页面,出现页面加载卡在80%,不能正常操作。
问题背景
我是SDK提供方,以内部包裹H5的形式,对外开放。对接方接入之后,发现打开页面后,页面会卡住。因为支持多入口接入,发现他们原生入口跳转的页面,打开正常;在H5入口打开,打开异常。
ps:原生入口->入口1;h5入口->入口2
排查思路
- 检查网络问题。(排除:入口1每次都可以打开,入口2一次都不成功)
- 检查H5内部原因。(排除:通过调试(chrome://inspect),无法发现问题)
- 检查是否被他们的webviwe影响
打开开发者选项->不保留活动。发现打开小说页面正常。所以思路3成立。(这个时候:应该排除生命周期内调用的相关代码,但我们使用了最麻烦的方法,复现场景)
因为他们用了基于webview的第三方框架 :Agentweb 。所以我们接入后,发现有问题,先是测试webSetting配置,然后才测试生命周期。最终定位到这段代码。
com.just.agentweb.DefaultWebLifeCycleImpl
@Override
public void onPause() {
if (this.mWebView != null) {
if (Build.VERSION.SDK_INT >= 11){
this.mWebView.onPause();
}
//引发问题
this.mWebView.pauseTimers();
}
}
结论
mWebView.pauseTimers, 会影响到js定时器的加载,而且是影响所有的webview。
排查问题的过程走了不少弯路,心累。总结下:一是知识储备不够,二是分析问题,抓错了重点。应该先按照猜测的方向去求证,解决不了,再尝试复现场景。毕竟有些时候,是很难复现的。希望以后少走弯路~~