人脸识别超时时间格式崩溃修复记录

问题现象

设置页将人脸识别超时时间保存为 5秒 或 10秒。原人脸识别弹框只移除英文后缀 s,随后直接调用 Integer.parseInt,导致已保存中文格式的设备在摄像头预览成功、启动倒计时时抛出 NumberFormatException。

根因

同一个偏好键 setting_face_recognition_time 存在多种历史格式:纯数字、英文 s 后缀和中文“秒”后缀。两个识别入口分别实现解析,其中 FaceRecognitionPop 未兼容中文格式,也没有非法值回退。

实现摘要

  1. 新增 FaceRecognitionTimeoutPolicy,职责限定为解析和规范化人脸识别超时时间,不负责偏好读取或计时调度。
  2. 兼容纯数字、英文 s 和中文“秒”,并自动清理首尾空白。
  3. 配置值为空、非法、溢出或非正数时,先使用调用方默认值;默认值也非法时使用命名的安全默认值。
  4. FaceRecognitionPop 和 FaceRecognitionDialogFragment 统一使用该策略,避免两个入口继续维护不同的解析逻辑。
  5. 保留已有偏好数据,无需用户清除应用数据或重新设置。

业务仓变更文件

测试与验证

TDD 过程

最终自动化验证

真机验收建议

  1. 将超时时间分别切换为“5秒”和“10秒”,进入人脸识别流程,确认预览启动后不再闪退。
  2. 等待对应时长,确认超时回调仍按 5 秒或 10 秒触发。
  3. 使用保留旧偏好数据的升级安装方式验证,确认无需清除应用数据。

文档归档检查

Git 操作

未执行 stage、commit、push、branch、merge、rebase、reset 或 clean。