USB 相机设置页 ANR 修复方案

1. 方案状态

2. 问题与根因

设备在 2026-07-23 13:43:33 进入相机设置页时发生输入分发超时,2026-07-21 曾出现相同调用链。

SettingsCameraFragment.refreshResolutionSpinnerCameraUsbUtils.getCamaraSizeCameraHelper.getSupportedSizeListCameraConnectionService.getCamera → 等待 USB 权限/相机服务。

这是同步硬件查询占用主线程造成的 ANR,不是 CPU 或内存不足。其后的 WorkManager、MQTT 超时属于主线程失去响应后的伴随现象。

3. 修复设计

3.1 主线程只读缓存

3.2 两阶段相机启动

  1. USB 设备打开后先启动相机,避免在主线程等待能力列表。
  2. 相机真正打开后,在后台查询支持的分辨率并更新缓存。
  3. 实际分辨率与已保存分辨率不同时,完整重建一次相机助手,并用缓存中的目标 Size 打开。
  4. 同一“相机 ID + 已保存分辨率”最多自动重试一次,防止设备拒绝目标分辨率时形成重连循环。

3.3 生命周期保护

4. 代码范围

5. 验收标准与结果

6. 风险与回退