Android WebView異常監(jiān)聽(tīng)兼容性處理

一 前言

為了提高Android webview異常情況對(duì)于用戶(hù)的友好度,可以從兩個(gè)方面入手,一是服務(wù)端統(tǒng)一處理,一是客戶(hù)端監(jiān)聽(tīng)異常狀態(tài)加載相應(yīng)的本地404或者超時(shí)頁(yè)面。
由于我們的App是政務(wù)類(lèi)平臺(tái),所以會(huì)接入大量第三方服務(wù)(而且是政府部門(mén)相關(guān)網(wǎng)頁(yè)),標(biāo)準(zhǔn)不一樣,基于上述業(yè)務(wù)場(chǎng)景,服務(wù)端的解決辦法,實(shí)現(xiàn)難度太高。
因此只能從客戶(hù)端入手解決,下面我們開(kāi)始做客戶(hù)端處理。

二 Webview的版本bug

由于android webview 早期的不成熟,在6.0以下自身存在bug(https://code.google.com/p/android/issues/detail?id=968
)的原因,android開(kāi)發(fā)者們通過(guò)查看官方文檔,總結(jié)了一些異常兼容性處理方法;詳情參考這邊文章 http://www.itdecent.cn/p/5c16e02ed422

  • Android6.0以上判斷404或者500
    重寫(xiě)WebViewClient()的onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse)方法,通過(guò)狀態(tài)碼判斷;
  • Android 6.0以下判斷404或者500
    重寫(xiě)WebChromeClient()的onReceivedTitle(WebView view, String title)方法,通過(guò)標(biāo)題是否包含“404”,"500","error"等字符判斷;
  • 斷網(wǎng)或者超時(shí)判斷(注意404或者500等其他非斷網(wǎng)超時(shí)情況不走這個(gè)方法)
    重寫(xiě)WebViewClient() 的onReceivedError(WebView view, int errorCode, String description, String failingUrl)

三 兼容性測(cè)試

以上操作看起來(lái)都很順利,其實(shí)是我天真了,我們開(kāi)始測(cè)試

3.1 6.0以上系統(tǒng)測(cè)試

問(wèn)題:
1.先看404的情況,果然進(jìn)了onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse)方法,但是問(wèn)題來(lái)了,正常的頁(yè)面也返回404,去查了一下官方文檔,發(fā)現(xiàn)一個(gè)請(qǐng)求頁(yè)面任何資源的加載都會(huì)引發(fā)HTTP ERROR都會(huì)引起該方法的回調(diào)(例如頁(yè)面的內(nèi)部請(qǐng)求圖標(biāo),或者圖片等),
解決方法:
通過(guò)判斷當(dāng)前請(qǐng)求的url地址request.getUrl()是否等于根url,但是有一些請(qǐng)求地址通過(guò)request.getUrl()獲取的url不等于根url,這個(gè)目前還沒(méi)找到好的辦法;

3.2 6.0以下系統(tǒng)測(cè)試

問(wèn)題
1.先看404的情況,onReceivedTitle,這個(gè)方法還是有個(gè)別服務(wù)返回的標(biāo)題不包含“404”,"500","error"等字符,暫時(shí)也沒(méi)有好的解決方法;

3.3 超時(shí)測(cè)試

問(wèn)題:
onReceivedError監(jiān)聽(tīng)超時(shí)情況,需要很長(zhǎng)時(shí)間,而webview請(qǐng)求的超時(shí)時(shí)間也不能控制,太影響用戶(hù)體驗(yàn);
解決辦法:
在WebViewClient的onPageStarted(改方法是每個(gè)請(qǐng)求地址開(kāi)始時(shí)調(diào)用),開(kāi)啟一個(gè)線程,設(shè)置一個(gè)時(shí)間監(jiān)聽(tīng),當(dāng)超過(guò)這個(gè)時(shí)間,加載超時(shí)頁(yè)面;

參考文章:

[1]http://www.itdecent.cn/p/5c16e02ed422
[2]https://jiandanxinli.github.io/2016-08-31.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容