在 Android 开发中,持久化(Persistence)是指将数据保存到存储设备中,以确保应用退出或设备重启后数据依然存在。
根据数据的规模、结构化程度以及访问频率,主要有以下几种主流方案:
1. 键值对存储 (Key-Value Storage)
适用于保存应用设置、用户偏好或少量的简单状态。
Jetpack DataStore (推荐): Google 官方推荐用来替代 SharedPreferences 的现代方案。它基于 Kotlin 协程和 Flow,解决了 SP 在主线程 I/O、异常处理和事务安全性上的弊端。
Preferences DataStore: 存储简单的键值对,不保证类型安全。
Proto DataStore: 结合 Protocol Buffers 存储自定义对象,提供强类型支持。
SharedPreferences (旧版/维护): 传统的键值对存储方式。虽然简单,但因为会在主线程读取、不支持局部更新等缺陷,在 2026 年的开发中已逐渐被 DataStore 取代。
MMKV(腾讯-微信存储方案)
2. 数据库存储 (Structured Data)
适用于存储大量结构化、且需要复杂查询的数据。
Room Persistence Library (推荐): Jetpack 组件之一,是 SQLite 之上的抽象层。
优点: 编译时 SQL 语法检查、减少样板代码、完美支持对象映射(ORM)、支持返回
Flow或LiveData实现响应式 UI。地位: 目前 Android 官方唯一指定的数据库标准方案。
SQLite: Android 自带的关系型数据库。虽然可以利用
SQLiteOpenHelper直接操作,但由于代码繁琐且易错,现在开发者通常直接使用 Room。SQLite
GreenSQL
3. 文件存储 (File Storage)
适用于存储图片、视频、日志或大型二进制文件。
内部存储 (App-specific Storage): 存储在
/data/data/<package_name>/下。数据是私有的,应用卸载时会被自动删除。外部存储 (Shared Storage): 用于存储可与其他应用共享的文件(如相册中的照片)。
Scoped Storage (分区存储): Android 10 以后强制执行。应用只能直接访问自己的目录,访问公共媒体库(图片、音频等)需使用
MediaStore API。Storage Access Framework (SAF): 通过系统文件选择器让用户选择特定文件或目录。
4. 方案对比与选型指南
5. 进阶/第三方方案
在某些特定场景下,你可能还会遇到:
EncryptedSharedPreferences / EncryptedFile: 用于存储密钥等敏感信息(属于 Security 库)。
SQLDelight: 一个可以将 SQL 语句生成类型安全 Kotlin 代码的库,在 KMP(Kotlin Multiplatform)跨平台开发中非常流行。
MMKV: 腾讯开发的基于 mmap 的高性能键值对存储库,读写效率极高。
Android 数据持久化(一):存储方案概述
https://lautung.com/archives/zXFnMClJ