上一篇
安卓开发储存数据
- 行业动态
- 2025-04-23
- 3
Android存储数据常用SharedPreferences、SQLite、文件及网络
安卓数据存储方式详解
SharedPreferences(共享偏好)
特点:
- 基于XML文件存储键值对
- 轻量级、操作简单
- 自动持久化到本地
适用场景:
- 简单配置信息(如用户设置、登录状态)
- 少量关键数据存储
核心API:
getSharedPreferences(String name, int mode)
edit().putString(key, value).commit()
文件存储
特点:
- 直接操作设备文件系统
- 支持文本/二进制格式
- 需处理文件路径和权限
适用场景:
- 临时缓存文件(如图片、日志)
- 配置文件(如JSON/XML文件)
核心API:
- 内部存储:
getFilesDir()
- 外部存储:
getExternalFilesDir(String type)
- 写入文件:
FileOutputStream
- 读取文件:
FileInputStream
注意:
- Android 10+ 外部存储需处理 Scoped Storage 限制
- 敏感文件建议加密存储
SQLite数据库
特点:
- 轻量级关系型数据库
- 支持复杂查询和事务
- 数据结构化存储
适用场景:
- 大量结构化数据(如用户信息、订单记录)
- 需要关联查询的场景
核心API:
SQLiteOpenHelper
(数据库创建与升级)SQLiteDatabase
(增删改查操作)- 示例SQL:
CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT)
ContentProvider(内容提供者)
特点:
- 跨应用数据共享机制
- 统一数据访问接口
- 支持URI定位资源
适用场景:
- 共享系统数据(如通讯录、媒体库)
- 第三方应用间数据交换
核心API:
- 系统CP:
ContactsContract
- 自定义CP:
ContentResolver.query(Uri, ...)
- 权限声明:
<provider>
标签配置
网络存储(云端存储)
特点:
- 数据存储在远程服务器
- 支持多设备同步
- 依赖网络连接
适用场景:
- 用户配置同步(如账号登录信息)
- 大文件存储(如图片、视频)
常用方案:
- RESTful API + JSON/XML
- 第三方服务(如Firebase Realtime Database)
- 本地缓存策略(如OkHttp + Retrofit)
存储方式对比表
存储方式 | 数据类型 | 持久化 | 访问复杂度 | 适用场景 |
---|---|---|---|---|
SharedPreferences | 键值对(简单类型) | 是 | 低 | 轻量级配置 |
文件存储 | 文本/二进制 | 是 | 中 | 临时文件、配置文件 |
SQLite | 结构化数据 | 是 | 中高 | 复杂数据、关联查询 |
ContentProvider | 多种数据类型 | 是 | 高 | 跨应用共享 |
网络存储 | 任意类型 | 否(可选) | 高(依赖网络) | 多设备同步、大文件存储 |
常见问题与解答
问题1:如何选择安卓数据存储方式?
解答:
- 简单键值数据:优先使用
SharedPreferences
(如夜间模式开关)。 - 文件型数据:文本/二进制文件用文件存储(如日志、配置文件)。
- 结构化数据:使用
SQLite
(如用户信息表、订单记录)。 - 跨应用共享:通过
ContentProvider
(如访问系统通讯录)。 - 云端同步:结合网络存储(如用户登录信息同步到服务器)。
问题2:Android 10+ 如何适配外部存储权限?
解答:
- Scoped Storage:使用
getExternalFilesDir()
替代getExternalStorageDirectory()
,仅能访问应用专属目录。 - 临时权限:通过
ACTION_OPEN_DOCUMENT
请求用户授权特定文件。 - MediaStore API:操作媒体文件时使用
ContentResolver
和MediaStore