上一篇
安卓开发中数据存储方法
- 行业动态
- 2025-04-23
- 3
安卓数据存储常用方法:SharedPreferences存键值对,文件存储分内外路径,SQLite处理结构化数据,ContentProvider跨应用共享,DataStore优化偏好
安卓数据存储方法详解
SharedPreferences(轻量级键值对存储)
原理:基于XML文件存储,以键值对形式保存简单数据类型(如boolean、int、float、long、String、Set)。
特点:
- 自动持久化,无需手动关闭流
- 适合存储少量简单配置(如用户偏好设置、登录状态)
- 读写操作简单,性能较高
API示例:
// 写入数据 SharedPreferences prefs = getSharedPreferences("config", MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); editor.putString("username", "admin"); editor.apply(); // 异步提交 // 读取数据 String username = prefs.getString("username", "default");
文件存储(File)
- 原理:通过
FileOutputStream
和FileInputStream
操作设备内部存储或SD卡文件。 - 特点:
- 支持文本文件(如CSV、JSON)和二进制文件
- 需处理文件路径和IO异常
- 适合存储非结构化数据(如日志、配置文件、图片资源)
- 存储位置:
| 存储类型 | 路径示例 | 权限注意 |
|—————-|———————————–|——————————|
| 内部存储 |/data/data/包名/files/
| 默认私有,无需申请权限 |
| 外部存储 |Environment.getExternalStorageDirectory()
| 需声明WRITE_EXTERNAL_STORAGE
|
SQLite数据库(结构化存储)
- 原理:轻量级关系型数据库,通过
SQLiteOpenHelper
管理版本和创建表。 - 特点:
- 支持SQL语句操作(增删改查)
- 适合存储复杂结构化数据(如用户信息、订单记录)
- 需处理数据库版本升级和并发访问
- 典型操作:
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER); INSERT INTO users (name, age) VALUES ('Alice', 25); SELECT FROM users WHERE age > 20;
ContentProvider(跨应用数据共享)
- 原理:通过URI标识数据,实现不同应用间数据交换(如访问通讯录、媒体库)。
- 特点:
- 支持CRUD操作(增删改查)
- 需定义
content://
格式的URI - 可结合
Loader
实现异步加载
- 常见类型:
| 数据类型 | 示例URI | 系统提供类 |
|—————-|————————————-|————————–|
| 通讯录 |content://contacts/people
|ContactsContract
|
| 图片库 |content://media/external/images/media
|MediaStore
|
网络存储(云端同步)
- 原理:通过HTTP/HTTPS与服务器交互,使用REST API或WebSocket传输数据。
- 特点:
- 数据存储在远程服务器(如MySQL、MongoDB、对象存储)
- 适合需要多设备同步的场景(如社交应用、云笔记)
- 需处理网络状态和数据加密
- 常用工具:
- Retrofit + OkHttp(HTTP请求)
- Firebase Realtime Database(实时同步)
- Room + WorkManager(本地与云端同步)
数据存储方式对比表
存储方式 | 数据类型 | 持久化 | 读写速度 | 适用场景 |
---|---|---|---|---|
SharedPreferences | 键值对(简单类型) | 是 | 快 | 用户偏好、轻量级配置 |
文件存储 | 文本/二进制文件 | 是 | 中等 | 日志、配置文件、图片缓存 |
SQLite数据库 | 结构化数据表 | 是 | 较慢 | 复杂业务数据、搜索过滤 |
ContentProvider | URI指向的数据集合 | 依赖提供方 | 依赖实现 | 跨应用共享数据(如图片、联系人) |
网络存储 | JSON/Protobuf等格式 | 依赖网络 | 最慢 | 多设备同步、云端持久化 |
相关问题与解答
问题1:如何根据数据特点选择存储方式?
解答:
- 简单配置:优先使用SharedPreferences(如夜间模式开关、用户登录状态)。
- 非结构化文件:选择文件存储(如下载的图片、日志文件)。
- 结构化业务数据:使用SQLite(如电商App的订单列表、社交App的聊天记录)。
- 跨应用共享:通过ContentProvider访问系统数据(如获取用户通讯录)。
- 多设备同步:结合本地SQLite/Room与网络存储(如Firebase)。
问题2:如何保障SQLite数据库的安全性?
解答:
- 权限控制:将数据库文件设置为
MODE_PRIVATE
,避免其他应用直接访问。 - 数据加密:对敏感字段(如密码、身份证号)使用AES加密存储。
- SQL注入防护:使用参数化查询(
SQLiteStatement
)代替字符串拼接。 - 备份管理:定期导出数据库到云端,并清理过期数据