存储方案知识体系概览
问题
Android 有哪些数据持久化方案?如何选型?
答案
Android 提供多种存储方案,按数据类型和使用场景选择:
方案对比
| 方案 | 数据类型 | 线程安全 | 性能 | 适用场景 |
|---|---|---|---|---|
| SharedPreferences | 键值对 | ❌ | 一般 | 简单配置(已不推荐) |
| DataStore | 键值对/Proto | ✅ | 好 | 替代 SP,官方推荐 |
| MMKV | 键值对 | ✅ | 极好 | 高频读写、跨进程 |
| Room | 结构化 | ✅ | 好 | 关系数据、复杂查询 |
| 文件存储 | 任意 | ❌ | 取决于 IO | 大文件、媒体、日志 |
选型建议
- 简单配置(主题、Token)→ DataStore Preferences
- 复杂配置(类型安全)→ DataStore Proto
- 高频读写 / 跨进程(统计、AB 参数)→ MMKV
- 结构化数据 / 列表(用户、文章)→ Room
- 大文件(图片、视频、日志)→ 文件存储
迁移建议
Google 官方建议从 SharedPreferences 迁移到 DataStore。Room 是 SQLite 的官方抽象层,优先使用 Room 而非直接操作 SQLite。
知识图谱
本分类涵盖以下核心知识点:
| 主题 | 核心内容 |
|---|---|
| SharedPreferences | SP 原理、ANR 问题、apply vs commit |
| DataStore | Preferences/Proto DataStore、Flow API |
| SQLite | SQLite 基础、SQL 操作、数据库升级 |
| Room | DAO/Entity/Database、关系查询、迁移 |
| 文件存储 | 内部/外部存储、Scoped Storage、SAF |
| MMKV | mmap 原理、Protobuf 编码、跨进程 |