Android打開(kāi)WebView黑屏閃爍問(wèn)題排查
現(xiàn)象
點(diǎn)擊搜索框,打開(kāi)新的 webview 頁(yè)面時(shí),出現(xiàn)了黑色過(guò)度頁(yè)面。
排查 & 嘗試修復(fù)
找到了一臺(tái)可復(fù)現(xiàn)的手機(jī),一加 8 (android 13),檢查了手機(jī)的黑暗模式 & 夜間模式是關(guān)閉的。
嘗試手動(dòng)指定 webview background 為透明色,問(wèn)題得到修復(fù)。
源碼探究
問(wèn)題修復(fù)了,但修復(fù)的不明不白。
為什么手動(dòng)指定背景色可以避免問(wèn)題,以及黑色背景是如何突然出現(xiàn)的。
我們帶著問(wèn)題繼續(xù)探尋。
發(fā)現(xiàn)出現(xiàn)問(wèn)題手機(jī)的 webview 版本較高,推測(cè)是 webview 版本升級(jí)帶來(lái)的行為變更。
我找來(lái)一臺(tái)沒(méi)有問(wèn)題的手機(jī),記錄了 webview 版本為 103.0.5060.129
然后把這臺(tái)手機(jī)的 webview 版本升級(jí)到 111.0.5563.58,果然出現(xiàn)了問(wèn)題。
比對(duì)這兩個(gè)版本 webview 負(fù)責(zé)背景相關(guān)的代碼:
103.0.5060.129:chromium.googlesource.com/chromium/sr…
111.0.5563.58:chromium.googlesource.com/chromium/sr…
高版本返回黑色背景的邏輯多了一個(gè) mSettings.prefersDarkFromTheme() 或條件。
通過(guò)注釋中的 todo 發(fā)現(xiàn),高版本修復(fù)了低版本的一個(gè) bug:bugs.chromium.org/p/chromium/…
如果應(yīng)用程序偏向深色主題,則將背景改為暗色。
以前的 WebView 只有在啟用了強(qiáng)制黑暗或同色系暗色系啟用時(shí),WebView 才會(huì)繪制暗色背景。
所以 mSettings.prefersDarkFromTheme() 應(yīng)該是判斷了當(dāng)前的主題是否是深色主題。
我們繼續(xù)追蹤實(shí)現(xiàn),prefersDarkFromTheme 的返回值來(lái)自于該方法:chromium.googlesource.com/chromium/sr…
chromium.googlesource.com/chromium/sr…
我的手機(jī)是大于 android Q 的,這里的 context 是 activity 的 context,theme 為 android:Theme:
可以看到 我們使用 Theme 的 isLightTheme = false,系統(tǒng)認(rèn)為是深色主題,所以在高版本 WebView 中,當(dāng)背景色沒(méi)有指定時(shí),系統(tǒng)使用了黑色作為背景色。
更好的修復(fù)方案
再看看這三個(gè)條件,在照顧老邏輯不變的基礎(chǔ)上,更適合的是調(diào)整增量條件 prefersDarkFromTheme 為 false。
而這個(gè)條件的原理我們也了解了,調(diào)整父類主題為明亮即可:android:Theme.Light
感謝閱讀。
以上就是Android打開(kāi)WebView黑屏閃爍問(wèn)題排查的詳細(xì)內(nèi)容,更多關(guān)于Android打開(kāi)WebView黑屏的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android仿微信@好友功能 輸入@跳轉(zhuǎn)、刪除整塊
這篇文章主要介紹了Android仿微信@好友功能 輸入@跳轉(zhuǎn)、刪除整塊,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-10-10Android存儲(chǔ)訪問(wèn)框架的使用小結(jié)
這篇文章主要介紹了Android存儲(chǔ)訪問(wèn)框架的使用,存儲(chǔ)訪問(wèn)框架API和MediaStore?API的差異,在于存儲(chǔ)訪問(wèn)框架API,是基于系統(tǒng)文件選擇框的,用戶選擇了文件,那么相當(dāng)于授權(quán)了,?可以訪問(wèn)所有類型的文件,需要的朋友可以參考下2022-01-01Android使用自定義PageTransformer實(shí)現(xiàn)個(gè)性的ViewPager動(dòng)畫(huà)切換效果
這篇文章主要介紹了Android使用自定義PageTransformer實(shí)現(xiàn)個(gè)性的ViewPager切換動(dòng)畫(huà),具有很好的參考價(jià)值,一起跟隨小編過(guò)來(lái)看看吧2018-05-05Android 上下滾動(dòng)TextSwitcher實(shí)例詳解
這篇文章主要介紹了Android 上下滾動(dòng)TextSwitcher實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06Android即時(shí)通訊設(shè)計(jì)(騰訊IM接入和WebSocket接入)
本文主要介紹了Android即時(shí)通訊設(shè)計(jì)(騰訊IM接入和WebSocket接入),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Android入門(mén)之Gallery用法實(shí)例解析
這篇文章主要介紹了Android入門(mén)之Gallery用法,對(duì)Android初學(xué)者有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2014-08-08Android編程實(shí)現(xiàn)ListView內(nèi)容無(wú)限循環(huán)顯示的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)ListView內(nèi)容無(wú)限循環(huán)顯示的方法,通過(guò)繼承Adapter類實(shí)現(xiàn)ListView中的數(shù)據(jù)無(wú)限循環(huán)顯示功能,需要的朋友可以參考下2017-06-06Android BroadcastReceiver常見(jiàn)監(jiān)聽(tīng)整理
這篇文章主要介紹了Android BroadcastReceiver常見(jiàn)監(jiān)聽(tīng)整理的相關(guān)資料,需要的朋友可以參考下2016-10-10