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

news2025/1/15 19:34:37

在这里插入图片描述

______ NO.1 ______
前言

  最近在研发项目的时候,有个模块调用webView功能;

  点击搜索框,进入webView页面,出现了黑色过渡页面,效果如下:


______ NO.2 ______
排查问题

  个人在排查此问题的时候,用了一台可复现的手机:1+ 8(android 13),检查手机的黑暗模式、夜间模式都是关闭的。

  那么黑色过渡页面是如何出现的?

  最终发现出现问题手机的 webView版本较高,推测是 webView版本升级带来的行为变更。

  我找来一台没有问题的手机,记录了 webView版本为103.0.5060.129

然后把这台手机的 webView升级到 111.0.5563.58,果然出现了问题。

比对这两个版本 webView负责背景相关的代码:

103.0.5060.129:chromium.googlesource.com/chromium

在这里插入图片描述

111.0.5563.58:chromium.googlesource.com/chromium

在这里插入图片描述

高版本返回黑色背景的逻辑多了一个 mSettings.prefersDarkFromTheme() 或条件。

通过注释中的todo 发现,高版本修复了低版本的一个bug:bugs.chromium.org/p/chromium/issues

在这里插入图片描述
如果应用程序偏向深色主题,则将背景改为暗色。
以前的 webView 只有在启用了强制黑暗或同色系暗色系启用时,webView 才会绘制暗色背景。

所以 mSettings.prefersDarkFromTheme() 应该是判断了当前的主题是否是深色主题。
我们继续追踪发现,perfersDarkFromTheme 的返回值来自于该方法:
chromium.googlesource.com/chromium/src

在这里插入图片描述

chromium.googlesource.com/chromium/src

在这里插入图片描述

我的手机是大于android Q的,这里的 context 是 activity 的 context,theme为 android:Theme:

在这里插入图片描述

可以看到 我们使用 Theme 的 isLightTheme = false,系统认为是深色主题,所以在高版本 WebView 中,当背景色没有指定时,系统使用了黑色作为背景色。

______ NO.3 ______
修复方案

在这里插入图片描述

再看看这三个条件,在照顾老逻辑不变的基础上,更适合的是调整增量条件 perfersDarkFromTheme 为 false。
而这个条件的原理我们也了解了,调整父类主题为明亮即可:android:Theme.Light

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis缓存双写一致性之更新策略

Redis缓存双写一致性之更新策略 一 面试题引入二 缓存双写一致性三 双写双检加锁策略四 数据库和缓存一致性的集中更新策略4.1 最终一致性4.2 可以关机的情况下4.3 不能关机的情况下,四种更新策略4.3.1 先更新数据库,再更新缓存4.3.2 先更新缓存&#xf…

【算法学习系列】03 - 由[1-5]等概率随机实现[2-10]等概率随机

文章目录 约定条件说明解决方案构造 0 1 发生器函数 f2()计算需要几个二进制位验证 2-10 等概率返回某个整数 总结 约定条件说明 假定 f() 是一个函数,保证 [1, 5] 范围内等概率返回一个整数实现 2-10 等概率随机不能使用 Math.random() 函数,只能使用函…

栈与队列的性质互换

本期内容:栈,队列的定义性质,性质转换 栈,队列的定义性质,性质转换 认识栈实现栈 队列实现 性质转换 认识栈 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和…

【渗透测试】web日志、linux命令、常用知识

文章目录 web日志分析基础知识1. 编码2. 解码工具3. 数据提交方式4. 常见脚本语言5. 日志还原 分析日志1. 分析日志的目的2. 攻击出现的位置3. 攻击常见的语句4. 攻击常见的特点5. 攻击日志分析流程 相关linux命令常用命令系统状态检测命令工作目录切换命令文本文件编辑命令文件…

BlueZ自动连接蓝牙耳机

问题:调好蓝牙之后,出现了一个客户问题,第一次连接好之后,开关机后没法自动连了。 解决方法: 针对这个情况,实际定位一下问题原因,原来是蓝牙耳机每次连时,都要求授权服务: Author…

sqlmap

1、Sqlmap简介: Sqlmap是一个开源的渗透测试工具,可以用来自动化的检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库…

Maven安装和配置(详细版)

Maven安装和配置 Maven安装1、安装链接:2、配置环境变量: Maven配置1、修改Maven仓库下载镜像及修改仓库位置:2、在Idea上配置Maven: 测试Maven安装能否安装jar包 Maven安装 1、安装链接: Maven – Download Apache …

使用A100 GPU搭建OBBDetection的运行环境

项目场景: 最近需要复现一篇目标检测论文的代码,文章提供了代码,因此自己根据仓库的说明尝试配置环境运行代码,但遇到了非常多的困难 问题描述 比较老的代码加上比较的GPU,导致了环境在配置的时候困难重重 OBBDetect…

xorm多表连接查询

SQL的连接查询可以将多个表的数据查询出来,形成一个中间表。在sql中为JOIN关键字。最常用的是LEFT JOIN,RIGHT JOIN,INNER JOIN,OUTER JOIN。 xorm框架是基于go语言的orm框架同样支持连接查询,由于xom及支持原生的sql查询也支持基于xorm的方法查询&…

openEuler用户软件仓(EUR)| 近期项目介绍

在操作系统的世界,软件包是一等公民,软件包的丰富程度和是否易于分发,一定程度上决定了操作系统用户和开发者的使用体验.。 EUR(openEuler User Repo)是openEuler社区针对开发者推出的个人软件包托管平台,目的在于为开发者提供一个…

【LeetCode训练营】用栈来实现队列+用队列来实现栈 详解

💯 博客内容:【LeetCode训练营】用栈来实现队列用队列来实现栈 详解 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! …

Requests-翻页请求实现

翻页请求实现 继https://blog.csdn.net/ssslq/article/details/130747686之后,本篇详述在获取了页面第一页之后,如何获取剩余页的标题内容。 网页:https://books.toscrape.com 找规律 同样还是进行页面的检查,切到网络一栏&…

MySQL查询——joininunion

MySql多表查询的几种方法 连接查询——join自连接查询子查询——🛠in合并查询——Union 认识MySQL数据库的多表查询,在对大量数据进行查询时仅仅使用一些基本的SQL语句已经无法满足我们日益增长的需求,如果要对多表进行查询就不得不认识以下几…

【计算机网络基础】测试2 物理层

文章目录 判断题选择题辨析题应用题 判断题 现在的无线局域网常用的频段是2.8GHz和5.4GHz。 多模光纤只适合于近距离传输。√ 数据在计算机内部多采用串行传输方式,但在通信线路上多采用并行传输方式。 统计时分复用可以按需动态分配时隙。√ 相对于同步时分复用…

安装Ubuntu系统

## ubuntu 22.04 环境处理(按顺序安装) 1. 搜索并打开“windows 功能”窗口 勾上图示的2项,点确定安装,可能要求重启电脑 2. windows store 中 安装ubuntu 22.04 wsl 一定要登录Microsoft Store 账号再操作 3.在ubuntu安装node.j…

以SpringMVC入门案例分析服务器初始化过程、单次请求流程

文章目录 1,SpringMVC概述2,SpringMVC入门案例2.1 需求分析2.2 案例制作步骤1:创建Maven项目步骤2:补全目录结构步骤3:导入jar包步骤4:创建配置类步骤5:创建Controller类步骤6:使用配置类替换web.xml步骤7:配置Tomcat环境步骤8:启动运行项目步骤9:浏览器…

RabbitMQ --- 死信交换机(一)

前言 当我们在使用消息队列时,难免会遇到一些消息被拒绝,重复投递或者超时等异常情况。这些异常消息如果不被正确处理,将会阻碍整个消息系统的正常运行。而此时,死信交换机(Dead Letter Exchange,简称DLX&…

【遇到dfs问题,点进来看看思路】【dfs本质之一 全排列思想解决大部分dfs】例题1.全排列 例题2.单词接龙

总之就是 在已知格线上,填充可用数据, 如果回退到A,那么把A之前所用数据,换一个,并且A之后的数据都重新填写 这就是全排列(截取的最关键部分,往下看) 这样的话,就是dfs的…

【节点边际电价】机组运行约束对机组节点边际电价的影响分析(Matlab代码实现)​

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

2023年美国大学生数学建模竞赛F题绿色GDP解题全过程文档及程序

2023年美国大学生数学建模竞赛 F题 绿色GDP 原题再现: 背景   国内生产总值(GDP)可以说是衡量-一个国家经济健康状况的最知名和最常用的指标之一。它通常被用于确定一个国家的购买力和获得贷款的机会,为国家提出促进其gdp的政策和项目提供动力。GDP衡…