Android DataStore 偏好设置与迁移
Android DataStore 偏好设置与迁移
摘要:DataStore 适合保存小型偏好和应用配置,并通过异步数据流提供一致读取。本文介绍存储边界、原子更新、错误处理和迁移。
一、选择适合的数据
主题选择、简单筛选偏好和开关适合放入 DataStore。大量记录、复杂查询、关系和分页属于数据库问题,不应把整个业务模型塞进偏好文件。
偏好键和默认值都是持久化契约。改名、改变类型或调整默认值会影响已有安装用户,需要规划兼容和迁移。
二、封装存储访问
界面不应直接操作底层键集合。由设置仓库暴露业务含义清楚的属性和更新函数,能够隐藏存储格式,也便于测试时替换实现。
读取应保持异步,并由数据流反映最新值。对于缺失键,定义明确默认值;对损坏内容则要区分恢复策略和诊断记录。
三、保证更新原子
读改写应在同一个事务更新中完成,避免先在界面读取旧值、之后再基于旧值覆盖写入。多个并发操作时,使用明确的新目标值比“取反当前值”更容易维持幂等。
重复写入同一值应无害。界面状态以存储流为准,避免同时维护多个互相竞争的偏好副本。
四、处理读取错误
存储流可能因 I/O 失败。仓库可以映射为初始化错误或使用安全默认值,但不要无条件吞掉所有异常。损坏文件、读权限问题和取消任务需要不同对待。
捕获错误时不要把取消信号转换成默认状态,否则页面离开后工作仍会继续。
五、规划迁移
从旧偏好迁移时,先确定默认值、类型转换规则和新旧数据冲突时的优先级。迁移应可重复执行,并确保迁移完成后不会每次启动都覆盖新设置。
旧值无法解析时应使用安全默认值并记录诊断。兼容过程中也要考虑用户已经更新过新设置的情况。
六、测试建议
每个测试使用独立的临时存储,覆盖默认值、写后读、并发更新和迁移。测试结束后释放文件资源。ViewModel 测试可替换仓库,检查设置如何映射为界面状态。
七、常见问题
- 不在主线程做同步磁盘读取。
- 不用偏好存储大量业务列表。
- 键名和类型变化时提供迁移规则。
- 不吞掉取消信号和未知存储错误。
- 账户切换时检查数据范围隔离。
八、总结
DataStore 适合小而明确的持久偏好。将存储封装为业务接口,采用原子更新,并为格式演进准备迁移和测试,可以让设置在应用升级后保持可靠。
- 点赞
- 收藏
- 关注作者
评论(0)