启动页无网与同步流程修复记录
问题与范围
启动页在人员列表请求失败时使用模态弹框阻断页面。设备无网时弹框会拦截启动页触摸,且启动流程缺少已初始化设备的离线降级路径。同时存在配置跳转后继续同步、批量同步后台线程直接回调页面、部分人员保存失败仍判定成功、页面销毁后异步回调继续执行等风险。
本次修复聚焦启动页、人员数据批量同步和人脸数据回调链路,不改动订单、支付协议和服务端接口。
代码改动
LaunchActivity.java:配置跳转后终止流程;按网络和首次同步状态区分远程同步、离线进入和首次初始化等待;以页面内操作区替换无网失败弹框;增加防重复、空值、生命周期和配置一致性保护;人脸初始化失败不再自动杀进程重启。StartupNetworkPolicy.java:集中定义启动阶段网络决策。BatchSyncResult.java:集中表达批量同步结果,只有全部成功才判定同步成功。BatchCustomerSyncManager.java:页面回调统一投递主线程;部分失败返回失败;支持取消和中断。CustomerDatabaseManager.java:按稳定业务 UUID 删除旧人员记录。FaceDataUpdaters.java:成功、失败和进度回调统一投递主线程,并支持解除回调。DeviceTypeUtils.java、Constants.java:为设备类型和人员同步协议值增加具名常量,移除数字与字符串魔法值。activity_launch.xml、strings.xml、dimens.xml:增加启动页内恢复操作区,文案与尺寸使用资源配置。- 新增启动网络决策和批量同步结果单元测试。
修复后的行为
- 已完成初始化的设备断网启动时,直接使用本地数据进入首页。
- 首次初始化断网时,启动页保持可触摸,可选择重新同步或前往设置。
- 网络恢复后提示重新同步;重复点击不会产生并发请求。
- 配置缺失时只打开一个设置页,不继续发起人员同步。
- 任意人员保存失败时,不写入初始化完成状态,不进入成功分支。
- 启动页退出后,已取消或迟到的回调不再操作旧页面。
验证
- TDD 红灯阶段确认新增测试在目标实现缺失时编译失败。
- 使用 Amazon Corretto 8 执行
JAVA_HOME=$(/usr/libexec/java_home -v 1.8) bash gradlew :app:testDebugUnitTest :app:assembleDebug --console=plain,结果为BUILD SUCCESSFUL。 - 新增 5 个回归测试及现有单元测试全部通过。
- 执行
git diff --check,未发现空白错误。
边界与后续验证
- 客屏设备类型与悬浮窗口类型需要真机确认,本次未调整。
- 两套人员/人脸接口是否可以合并需要确认服务端契约,本次保留原接口职责。
- 仍需真机验证首次安装断网、已初始化断网、同步中断网、网络恢复重试、人脸支付开关和双屏显示。
- 本次未执行 Git 提交、暂存或推送。