最近在开发一个新APP,因为要上架谷歌商店,所以webview组件用的安卓官方原生的。结果发现onPageFinished会重复调用,总共会加载3次,而且我的url并没有重定向的问题。
查资料:
WebViewClient.onPageFinished()。你永远无法确定当WebView调用这个方法的时候,网页内容是否真的加载完毕了。当前正在加载的网页产生跳转的时候这个方法可能会被多次调用,StackOverflow上有比较具体的解释( How to listen for a Webview finishing loading a URL in Android? ), 但其中列举的解决方法并不完美。所以当你的WebView需要加载各种各样的网页并且需要在页面加载完成时采取一些操作的话,可能WebChromeClient.onProgressChanged()比WebViewClient.onPageFinished()都要靠谱一些。 WebView 在Android4.4的手机上onPageFinished()回调会多调用一次(具体原因待追查)
需要尽量避免在onPageFinished()中做业务操作,否则会导致重复调用,还有可能会引起逻辑上的错误.
后来尝试改为腾讯的X5WebView,发现是正常的只加载1次。可惜x5会动态下发和下载so包等问题,不适合集成到上架谷歌商店的应用里。
结论: 只上架中国大陆的APP,推荐使用X5WebView; 必须上架Google Play商店的,只能使用原生WebView,写一个变量或者方法去想办法避免重复调用的问题。
|