Android 打开webView黑屏闪烁问题排查

NO.1前言
最近在研发项目的时候 , 有个模块调用功能;
点击搜索框 , 进入页面 , 出现了黑色过渡页面 , 效果如下:
NO.2排查问题
个人在排查此问题的时候 , 用了一台可复现的手机:1+ 8( 13) , 检查手机的黑暗模式、夜间模式都是关闭的 。
那么黑色过渡页面是如何出现的?
最终发现出现问题手机的 版本较高 , 推测是 版本升级带来的行为变更 。
我找来一台没有问题的手机 , 记录了 版本为103.0.5060.129
然后把这台手机的 升级到 111.0.5563.58 , 果然出现了问题 。
比对这两个版本 负责背景相关的代码:
103.0.5060.129:/
111.0.5563.58:/
高版本返回黑色背景的逻辑多了一个 .() 或条件 。
通过注释中的todo 发现 , 高版本修复了低版本的一个bug:/p//
如果应用程序偏向深色主题 , 则将背景改为暗色 。
以前的只有在启用了强制黑暗或同色系暗色系启用时 ,  才会绘制暗色背景 。
所以 .() 应该是判断了当前的主题是否是深色主题 。

Android 打开webView黑屏闪烁问题排查

文章插图
我们继续追踪发现 ,  的返回值来自于该方法:
//src
//src
我的手机是大于 Q的 , 这里的是的  , theme为 :Theme:
可以看到 我们使用 Theme 的= false , 系统认为是深色主题 , 所以在高版本中 , 当背景色没有指定时 , 系统使用了黑色作为背景色 。
NO.3修复方案
再看看这三个条件 , 在照顾老逻辑不变的基础上 , 更适合的是调整增量条件为 false 。
【Android 打开webView黑屏闪烁问题排查】而这个条件的原理我们也了解了 , 调整父类主题为明亮即可::Theme.Light