Android打開WebView黑屏閃爍問題排查
現(xiàn)象
點擊搜索框,打開新的 webview 頁面時,出現(xiàn)了黑色過度頁面。

排查 & 嘗試修復(fù)
找到了一臺可復(fù)現(xiàn)的手機,一加 8 (android 13),檢查了手機的黑暗模式 & 夜間模式是關(guān)閉的。
嘗試手動指定 webview background 為透明色,問題得到修復(fù)。
源碼探究
問題修復(fù)了,但修復(fù)的不明不白。
為什么手動指定背景色可以避免問題,以及黑色背景是如何突然出現(xiàn)的。
我們帶著問題繼續(xù)探尋。
發(fā)現(xiàn)出現(xiàn)問題手機的 webview 版本較高,推測是 webview 版本升級帶來的行為變更。
我找來一臺沒有問題的手機,記錄了 webview 版本為 103.0.5060.129

然后把這臺手機的 webview 版本升級到 111.0.5563.58,果然出現(xiàn)了問題。
比對這兩個版本 webview 負責(zé)背景相關(guān)的代碼:
103.0.5060.129:chromium.googlesource.com/chromium/sr…

111.0.5563.58:chromium.googlesource.com/chromium/sr…

高版本返回黑色背景的邏輯多了一個 mSettings.prefersDarkFromTheme() 或條件。
通過注釋中的 todo 發(fā)現(xiàn),高版本修復(fù)了低版本的一個 bug:bugs.chromium.org/p/chromium/…

如果應(yīng)用程序偏向深色主題,則將背景改為暗色。
以前的 WebView 只有在啟用了強制黑暗或同色系暗色系啟用時,WebView 才會繪制暗色背景。
所以 mSettings.prefersDarkFromTheme() 應(yīng)該是判斷了當(dāng)前的主題是否是深色主題。
我們繼續(xù)追蹤實現(xiàn),prefersDarkFromTheme 的返回值來自于該方法:chromium.googlesource.com/chromium/sr…

chromium.googlesource.com/chromium/sr…

我的手機是大于 android Q 的,這里的 context 是 activity 的 context,theme 為 android:Theme:

可以看到 我們使用 Theme 的 isLightTheme = false,系統(tǒng)認為是深色主題,所以在高版本 WebView 中,當(dāng)背景色沒有指定時,系統(tǒng)使用了黑色作為背景色。
更好的修復(fù)方案

再看看這三個條件,在照顧老邏輯不變的基礎(chǔ)上,更適合的是調(diào)整增量條件 prefersDarkFromTheme 為 false。
而這個條件的原理我們也了解了,調(diào)整父類主題為明亮即可:android:Theme.Light
感謝閱讀。
以上就是Android打開WebView黑屏閃爍問題排查的詳細內(nèi)容,更多關(guān)于Android打開WebView黑屏的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android開發(fā)兩個activity之間傳值示例詳解
這篇文章主要為大家介紹了Android開發(fā)兩個activity之間傳值示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
Android使用OKhttp3實現(xiàn)登錄注冊功能+springboot搭建后端的詳細過程
這篇教程主要實現(xiàn)Android使用OKhttp3實現(xiàn)登錄注冊的功能,后端使用SSM框架,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,需要的朋友參考下吧2021-07-07
Android startActivityForResult的基本用法詳解
這篇文章主要介紹了Android startActivityForResult的基本用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08
Android程序自動更新功能模塊的實現(xiàn)方法【附完整demo源碼下載】
這篇文章主要介紹了Android程序自動更新功能模塊的實現(xiàn)方法,具備完整的自動檢測更新及下載、安裝等功能,并附帶完整的demo源碼供大家下載參考,需要的朋友可以參考下2016-08-08
Android通過自定義ImageView控件實現(xiàn)圖片的縮放和拖動的實現(xiàn)代碼
通過自定義ImageView控件,在xml布局里面調(diào)用自定的組件實現(xiàn)圖片的縮放。下面給大家分享實現(xiàn)代碼,感興趣的朋友一起看看吧2016-10-10

