Skip to content
阅读进度

如何理解Room、SQLite 与本地数据一致性? ​

返回 架构与 SDK 目录

标准回答 ​

Room 在 SQLite 之上提供实体、DAO 和查询校验等能力,减少部分手写映射错误,但不替代数据库索引与事务设计。主线程上的大查询或写入仍会影响 UI,应在受控执行环境中运行并处理取消和结果版本。

多表一起变化时使用事务维持不变量,观察数据变化时避免反馈循环。缓存表和权威业务表应区分,用户退出或身份切换需要清理或隔离对应数据,不能继续展示上一个账户的私有内容。

数据库升级需保留 Schema 版本并提供迁移路径。直接破坏性重建只适用于明确可丢弃的数据;对于不可重新获取的用户内容,应有正确迁移和恢复验证。Parcelable / Bundle 更适合小型进程间或页面状态传输,不是长期数据库格式。

追问与回答 ​

WAL 会让数据库没有锁吗 ​

不会,它改变部分读写并发行为,写入和检查点仍有约束;长事务和大写入依然可能影响延迟。

为什么观察查询收到旧页面结果 ​

订阅作用域或请求代次没有随身份、筛选和页面变化更新,数据库持久化正确不代表 UI 绑定正确。

易混淆点 ​

  • 把自动生成 DAO 当作不需要关心 SQL 和迁移。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。