最近遇到一个很诡异的webview问题,两个Activity a和b,里面都使用了webview。
如果单独用a,并不会有问题。但是如果是a->b->a这样的顺序,会导致a里webview的js都失效了。
也就是webview之间发生了互相影响。
问题非常诡异,因为他们是不同的webview对象,排查一天,采用了二分法定位问题代码,最终发现导致bug的代码如下:
@Override protected void onResume() { super .onResume(); mWebView.resumeTimers(); } @Override protected void onPause() { super .onPause(); mWebView.pauseTimers(); }
这两行代码看上去没啥毛病,网上也有很多类似用法,但是经测试,屏蔽掉后就解决了js失效的问题。
看了下api说明:
public void pauseTimers () Added in API level 1 Pauses all layout, parsing, and JavaScript timers for all WebViews. This is a global requests, not restricted to just this WebView. This can be useful if the application has been paused.
原来这个方法是全局生效的,会导致所有webview的js失效,太蛋疼了。
尊重原著,尊重作者,转自:http://blog.youkuaiyun.com/anjxue/article/details/50015847