WebView.pauseTimers引发的问题

895 阅读2分钟
问题:

从一个webview页面跳转到另一个包含webview的页面,出现页面加载卡在80%,不能正常操作。

问题背景

我是SDK提供方,以内部包裹H5的形式,对外开放。对接方接入之后,发现打开页面后,页面会卡住。因为支持多入口接入,发现他们原生入口跳转的页面,打开正常;在H5入口打开,打开异常。

ps:原生入口->入口1;h5入口->入口2

排查思路
  1. 检查网络问题。(排除:入口1每次都可以打开,入口2一次都不成功)
  2. 检查H5内部原因。(排除:通过调试(chrome://inspect),无法发现问题)
  3. 检查是否被他们的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。


排查问题的过程走了不少弯路,心累。总结下:一是知识储备不够,二是分析问题,抓错了重点。应该先按照猜测的方向去求证,解决不了,再尝试复现场景。毕竟有些时候,是很难复现的。希望以后少走弯路~~

参考链接:

记录一次 WebView.pauseTimers 引发的问题及该方法的真实含义