用途:在 Android 应用中建立结构化本地数据源与类型化偏好存储。Room 作为 SQLite 上的持久化层,负责实体、DAO、迁移;DataStore 用于偏好或 Proto 数据,不是第二个 SQLite。适用于创建本地数据库、缓存和离线数据场景。
主要能力:Room 支持 KSP 注解处理、Flow 与 PagingSource 观察、suspend 写入、@Upsert、@Embedded/@Relation、TypeConverters、外键与索引。DataStore 提供 Preferences 或 Proto 两种形态,键需类型化,一个上下文一个文件,提供原子 edit。SQLCipher 仅在产品要求加密时使用。
使用方式:按 data/local/db 与 data/local/datastore 组织目录,保持单一 AppDatabase,DAO 按聚合划分,由仓库层组合 Room 与网络,UI 不直接调用 DAO。示例仅示意:@Dao 接口中使用 @Query 返回 Flow,@Upsert suspend 写入。必须开启 exportSchema=true 并把 schema 纳入版本控制;每次 schema 变更递增版本并提供迁移。
关键规则:生产环境禁用 fallbackToDestructiveMigration() 与 allowMainThreadQueries;不在 DAO 外拼接 SQL;写入由 Room 执行器串行处理,不重复打开 AppDatabase;新建偏好使用 DataStore 而非 SharedPreferences;大列表或业务 blob 不放 DataStore。
限制与资料缺口:原文未提供具体价格、平台范围、完整安装命令或效果数据;迁移与 DataStore 细节需结合项目实际测试。