草稿保存一致性与后台 JSON 准备 · 2026-10-26
本轮继续修复 perf/direct-rime-startup-20261024 的草稿保存链路。完整来源与验证边界。
保存一致性
- 用实际 JSON 内容去重,避免
{"label":"Aa"}与{"label":"BB"}的相同String.hashCode()导致后一次编辑漏存;从文件读回的草稿同样按内容判断。 - 先写同目录唯一临时文件,再通过 rename 发布完整版本。写入或替换失败时,旧的完整快照保持可用;生命周期 Bundle 在大草稿保存失败后保留上一份成功快照的引用。不能据此保证失败前最新一次编辑已经落盘。
- 拒绝草稿文件软链接,包括指向同目录另一草稿的链接;过期临时文件只清理本存储器严格命名的文件。
- 发布前注入异常/替换失败测试验证旧文件不受损、临时文件清理与再次保存。该验证覆盖进程中断窗口的文件状态,不代表物理断电持久性或 fsync 保证。
第一批完整构建与回归日志保留。
后台 JSON 准备
已完成的编辑操作复用撤销历史中的独立深拷贝,在 Dispatchers.Default 生成 JSON。ViewModel 保管缓存,不持有 Activity;只有一个编码任务,连续请求只保留最新待处理文档。页面所有者销毁会取消任务与完成句柄,旧版本不会发布到缓存。
onSaveInstanceState 读取缓存前逐段比较当前布局、嵌套宏、横竖屏高度、辅助栏配置与按键。内嵌表单的未完成编辑不会误用较早快照;缓存缺失、准备失败或内容不匹配时保留原同步导出兜底。序列化失败也尝试保留已有成功快照引用。
D7 仍是部分修复:上述兜底仍可能在 Main 序列化;生命周期草稿文件写入也仍在 Main。不能将后台准备等同于保存全过程已移出主线程。
验证
- 完整 JVM 统计与草稿用例:1002 项应用 JVM、6 项构建逻辑测试通过,失败/错误/跳过均为 0。本批新增 8 项实际临时文件测试和 11 项后台缓存测试。
- 最终复跑日志:覆盖独立快照、后台线程、逐段内容失配、合并待办、失败重试、关闭前后取消以及与原导出格式一致。用例为 JVM 测试,不冒充设备杀进程验收。
- Python 包校验 4 项通过。
- 本轮未重新安装模拟器;上一批设备记录的运行代码仍为
6f96066b,不将其作为本轮新运行代码的设备验证。本轮未测真机启动/按键延时或堆峰值。
构建范围与原清单
用户于 2026-10-26 明确仅需 arm64-v8a,四 ABI 覆盖待办 P2-15 按需求关闭,不计作代码缺陷修复。发行工作流保持 ARM64,未扩展四 ABI 构建矩阵。
原 139 条对照仍有 8 条需处理(4 条仍存在、4 条部分修复),另有 3 条待验证。本批补充发现不额外扣减旧报告条目。
远端安装包
CI 40269824527 的 JVM、Python 包校验、签名 ARM64 Release 构建和包内检查均成功。下载本批 ARM64 Release,对应 7ec08c8e。
APK 校验输出来自 CI 构建作业日志:仅 arm64-v8a 的 direct-rime/c++ 原生库、16 KiB 对齐,固定规则与许可证均通过检查。CI 及产物元数据包含源提交和散列;本轮没有将 Release 安装到真机。