關于WebView 重定向行為導致的多次加載的問題
使用 WebView 時,我們通常會重寫以下方法:
shouldOverrideUrlLoading()
onPageStarted()
onPageFinished()
一、WebView 內(nèi)部點擊連接,他們的回調(diào)順序是這樣的:
1、如果是固定的地址:
shouldOverrideUrlLoading() -> onPageStarted()-> onPageFinished()
shouldOverrideUrlLoading()由于它要提供給APP選擇加載網(wǎng)頁環(huán)境的機會,所以只要是網(wǎng)頁上地址請求,都會獲取到。
2、如果是重定向地址,在跳轉(zhuǎn)到目的地址之前會不斷重定向,每一次重定向都會回調(diào):
redirection: onPageStarted()->shouldOverrideUrlLoading()->onPageFinished()
那么一個正常的重定向地址,方法的執(zhí)行順序就是:
shouldOverrideUrlLoading()->redirection -> … ->redirection ->onPageStarted()->onPageFinished()
二、開啟WebView 直接loadUrl(其實就是少了shouldOverrideUrlLoading()):
1、 如果是目的地址,那么方法的執(zhí)行順序是:
onPageStarted()-> onPageFinished()
loadUrl()加載地址時,一般不會觸發(fā)shouldOverrideUrlLoading(),一旦觸發(fā)了,就說明這是一個重定向地址。
2、 如果是重定向地址,方法的執(zhí)行順序就是:
redirection -> … -> redirection ->onPageStarted()->onPageFinished()
所以,如果我們想要自定義進度條,就要考慮如何避免重定向行為導致的多次加載問題:
設置一個Boolean全局變量flag,
在onPageStarted()中設置為true,若加載樣式?jīng)]有開啟,就開啟進度條等加載樣式;
在onPageFinished()中檢測,如果為true,就說明已經(jīng)是目的地址,可以關閉加載樣式,如果是false,就不做處理,繼續(xù)等待;
在shouldOverrideUrlLoading()中,設置為false,若加載樣式?jīng)]有開啟,就開啟進度條等加載樣式
這樣就可以很好的控制加載樣式和網(wǎng)址跳轉(zhuǎn)之間的關系了。
或參考:How to listen for a WebView finishing loading a URL?
補充知識:webview多次調(diào)用onPageFinished問題
項目中遇到了webview多次調(diào)用onPageFinished問題,相關文章比較多,但是很多是無效的,甚至有些需要服務器修改。
直到谷歌到https://stackoverflow.com/questions/3149216/how-to-listen-for-a-webview-finishing-loading-a-url
才發(fā)現(xiàn)有用的方案
其中這個方法最終優(yōu)雅得解決了我的問題

public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (m_webView.getProgress() == 100) {
progressBar.setVisibility(View.GONE);
m_webView.setVisibility(View.VISIBLE);
}
}
以上這篇關于WebView 重定向行為導致的多次加載的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Android Drawerlayout側(cè)拉欄事件傳遞問題的解決方法
這篇文章主要為大家詳細介紹了Android Drawerlayout側(cè)拉欄事件傳遞問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11
Android 根據(jù)EditText搜索框ListView動態(tài)顯示數(shù)據(jù)
這篇文章主要介紹了Android 根據(jù)EditText搜索框ListView動態(tài)顯示數(shù)據(jù)的相關資料,需要的朋友可以參考下2016-09-09
Jetpack?Compose重寫TopAppBar實現(xiàn)標題多行折疊詳解
這篇文章主要為大家介紹了Jetpack?Compose重寫TopAppBar實現(xiàn)標題多行折疊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
Android開發(fā)中ImageLoder加載網(wǎng)絡圖片時將圖片設置為ImageView背景的方法
這篇文章主要介紹了Android開發(fā)中ImageLoder加載網(wǎng)絡圖片時將圖片設置為ImageView背景的方法,涉及Android ImageView圖片加載及背景設置相關操作技巧,需要的朋友可以參考下2018-01-01
Android ListView和Adapter數(shù)據(jù)適配器的簡單介紹
這篇文章主要介紹了Android ListView和Adapter數(shù)據(jù)適配器的簡單介紹,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04

