1. 问题背景
本次验证聚焦以下场景:
- 后台线程异步调用
WebSettings.getDefaultUserAgent() - 主线程在冷启动阶段首次调用
new WebView() - 两者并发进入 WebView provider / Chromium 初始化链
目标不是验证'预热是否一定提速',而是确认:
- 是否存在共享初始化链竞争
- 主线程是否会因此被拖慢或阶段性阻塞
- 是否具备演化为 ANR 的风险
2. 关键修正结论
结合当前所有日志,更准确的结论应为:
getDefaultUserAgent()与首次new WebView()并发时,二者并不是始终'卡死'在WebViewFactory.getProvider()这一行;更真实的表现是:它们会共享同一条 WebView provider / Chromium 初始化链,在不同阶段交错推进,并在部分关键节点出现阶段性等待、锁竞争或串行化,进而放大主线程耗时。
也就是说,问题本质更接近:
- 交错执行
- 阶段性阻塞
- 共享初始化链导致主线程长卡顿
而不是:
- 两个线程永久互锁
- 一直完全卡死在
WebViewFactory.getProvider()
3. 验证方式
统一实验模式:
EXPERIMENT_MODE = CONCURRENT- 冷启动首次进入
MainActivity - 在
new WebView()前触发后台WebSettings.getDefaultUserAgent() - 通过 watchdog 在
100ms / 200ms / 500ms采样:- 主线程栈
- UA 线程栈
- 当前阻塞时长
- UA 线程状态
关键日志关键词:
WebWarmVerifywatchdog_triggerthread_dump role=mainthread_dump role=ua
4. 测试设备与配置
4.1 模拟器配置
| 设备名 | 系统版本 | 镜像/ABI | 启动方式 | 资源配置 | 配置定位 |
|---|---|---|---|---|---|
Pixel_API25_7.1.1 | API 25 / Android 7.1.1 | Google Play x86 | Cold Boot | CPU 2 核 / RAM 2GB / Graphics Automatic | 问题复现配置 |
Pixel3a_API29_WebView |


