① SharedPreferences(轻量级键值存储)
原理: 使用 XML 文件以键值对形式存储数据,调用 Context.getSharedPreferences()。
存储路径: data/data/<包名>/shared_prefs/
特点:
- 轻量、简单,适合少量配置数据
- 自动持久化为 XML 文件
- 支持 String、int、boolean、float、long、Set<String> 等类型
应用场景:
- 用户偏好设置(主题、语言、通知开关)
- 登录状态、Token 缓存
- 首次启动引导标识
-
简单配置参数存储
val sp = getSharedPreferences("config", MODE_PRIVATE)
sp.edit().putBoolean("dark_mode", true).apply()
val darkMode = sp.getBoolean("dark_mode", false)
② 文件存储
原理: 通过 Java I/O 流(FileInputStream / FileOutputStream)直接读写文件。
两种存储位置:
| 类型 | 路径 | 权限 |
|---|---|---|
| 内部存储 | data/data/<包名>/files/ | 仅本应用可访问 |
| 外部存储 | storage/emulated/0/ | 需运行时权限(6.0+) |
特点:
- 灵活,支持任意格式(文本、图片、音视频、JSON 等)
- 适合大文件存储
- 外部存储需处理运行时权限
应用场景:
- 图片/视频缓存
- 数据备份(CSV、JSON 导出)
- 游戏资源存储
-
日志文件写入
// 写入
openFileOutput("data.txt", MODE_PRIVATE).use {
it.write("Hello".toByteArray())
}
// 读取
openFileInput("data.txt").bufferedReader().readText()
③ SQLite 数据库
原理: Android 内置的轻量级关系型数据库,基于 SQLiteOpenHelper,使用 android.database.sqlite 包。
存储路径: data/data/<包名>/databases/
特点:
- 完整关系型数据库,支持 SQL 语句
- 支持索引、事务、触发器
- 适合存储大量结构化数据
- 底层由 C 语言编写,Android 原生集成
应用场景:
- 通讯录、短信、通话记录
- 电商订单、商品、购物车
- 聊天消息记录
-
任何需要复杂查询的 structured 数据
class MyHelper(context: Context) : SQLiteOpenHelper(context, "demo.db", null, 1) {
override fun onCreate(db: SQLiteDatabase) {
db.execSQL("CREATE TABLE user (_id INTEGER PRIMARY KEY, name TEXT)")
}
override fun onUpgrade(db: SQLiteDatabase, old: Int, new: Int) {}
}
④ ContentProvider(内容提供者)
原理: Android 四大组件之一,通过统一 URI 接口暴露数据,实现跨应用数据共享。
核心 URI: content://<authority>/<path>/<id>
特点:
- 跨应用数据共享的核心方式
- 提供标准 CRUD 接口(query/insert/update/delete)
- 底层通常依赖 SQLite 或文件存储
- 系统内置:联系人、短信、媒体库等
应用场景:
- 读取系统联系人、相册、短信
- App 间数据分享(如微信分享图片)
- 提供自身数据给其他应用
-
实现数据同步中间件
// 读取联系人
val cursor = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, null, null, null
)
⑤ 网络存储(云端存储)
原理: 通过网络将数据上传至云端服务器,本地仅缓存索引/元数据。
常见方式:
- HTTP/HTTPS RESTful API
- 云服务 SDK(阿里云 OSS、Firebase、LeanCloud)
- WebDAV、云盘 API
特点:
- 数据与设备解耦,支持多端同步
- 支持海量存储空间
- 需考虑网络安全(HTTPS、数据加密)
- 通常需要用户认证
应用场景:
- 云相册自动备份
- 笔记/文档多设备同步(印象笔记、Notion)
- 聊天记录云同步
- App 业务数据上报
- 实时协作类应用
📊 5种方式对比
| 存储方式 | 数据量 | 结构化 | 跨应用共享 | 典型场景 |
|---|---|---|---|---|
| SharedPreferences | 少量 | 键值对 | ❌ | 设置项、登录态 |
| 文件存储 | 任意 | 任意格式 | ❌ | 缓存、媒体、备份 |
| SQLite | 大量 | 关系型 | ⚠️ 需配合ContentProvider | 业务数据、聊天记录 |
| ContentProvider | 中大量 | 灵活 | ✅ 核心方式 | 系统数据、跨App共享 |
| 网络存储 | 海量 | 任意 | ✅ 多端同步 | 云备份、云笔记、数据上报 |
总结: Android 完整提供了从轻量键值(SharedPreferences)到重量级数据库(SQLite)、文件、网络、跨应用共享(ContentProvider)的全栈存储能力。