灯控锁竞争 ANR 修复实施计划

执行方式:当前 Codex 任务内联执行;每个阶段先测试、再实现、再验证。不执行 Git 提交。

目标:消除主线程对灯控锁的等待,合并重复灯光请求,避免稳定重量回调持续创建 Rx 任务和重复执行 RootCmd。

架构:LightController 负责普通灯光、临时闪烁和持续报警三种模式的状态协调,所有厂商灯控调用都进入唯一的 ScheduledExecutorService。公共接口只更新目标状态并立即返回;LightDriver 隔离厂商 SDK,便于 JVM 单元测试验证去重、优先级和恢复行为。

技术栈:Java 8、Android、JUnit 4、ScheduledExecutorServiceAtomicReferenceAtomicBoolean

任务 1:用测试固化 ANR 修复约束

JAVA_HOME=$(/usr/libexec/java_home -v 1.8) sh ./gradlew :app:testDebugUnitTest --tests com.zhct.traybinding.hardware.LightControllerTest

任务 2:隔离硬件驱动

新增 LightDriver.javaAithingsLightDriver.java;接口只包含开关和亮度设置,生产实现只转发厂商 SDK。

任务 3:重构灯控为单线程状态机

任务 4:复核重量回调兼容边界

保留两套重量读取路径现有的绿灯请求,避免改变首次亮灯和硬件失败后的再次请求行为;由 LightController 在调用入口去重,同一绿灯请求不投递新任务、不执行 RootCmd。页面、弹窗和报警已有的显式灯光入口保持不变。

任务 5:验证与真机复测

任务 6:归档变更记录

在 WeightSingle116 提示词工程的 change_records 下保存同名 Markdown 与 HTML,并更新总 CHANGELOG。