我是靠谱客的博主 矮小果汁,最近开发中收集的这篇文章主要介绍WebView 重定向行为导致的多次加载问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用 WebView 时,我们通常会重写以下方法:

shouldOverrideUrlLoading()
onPageStarted()
onPageFinished()

一、WebView 内部点击连接,他们的回调顺序是这样的:

1、如果是固定的地址:

shouldOverrideUrlLoading() -> onPageStarted()-> onPageFinished()
shouldOverrideUrlLoading()由于它要提供给APP选择加载网页环境的机会,所以只要是网页上地址请求,都会获取到。

2、如果是重定向地址,在跳转到目的地址之前会不断重定向,每一次重定向都会回调:

redirection:
onPageStarted()->shouldOverrideUrlLoading()->onPageFinished()

那么一个正常的重定向地址,方法的执行顺序就是:

shouldOverrideUrlLoading()->redirection -> ->redirection ->onPageStarted()->onPageFinished()

二、开启WebView 直接loadUrl(其实就是少了shouldOverrideUrlLoading()):

1、 如果是目的地址,那么方法的执行顺序是:

 onPageStarted()-> onPageFinished()
loadUrl()加载地址时,一般不会触发shouldOverrideUrlLoading(),一旦触发了,就说明这是一个重定向地址。

2、 如果是重定向地址,方法的执行顺序就是:

 redirection -> ->
redirection ->onPageStarted()->onPageFinished()

所以,如果我们想要自定义进度条,就要考虑如何避免重定向行为导致的多次加载问题:

设置一个Boolean全局变量flag,

  1. 在onPageStarted()中设置为true,若加载样式没有开启,就开启进度条等加载样式;

  2. 在onPageFinished()中检测,如果为true,就说明已经是目的地址,可以关闭加载样式,如果是false,就不做处理,继续等待;

  3. 在shouldOverrideUrlLoading()中,设置为false,若加载样式没有开启,就开启进度条等加载样式
    这样就可以很好的控制加载样式和网址跳转之间的关系了。

  4. 或参考:How to listen for a WebView finishing loading a URL?

最后

以上就是矮小果汁为你收集整理的WebView 重定向行为导致的多次加载问题的全部内容,希望文章能够帮你解决WebView 重定向行为导致的多次加载问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部