上一篇
安卓存储格式
- 行业动态
- 2025-04-23
- 4393
安卓存储格式主要为EXT4,应用数据存/data/data,媒体存/sdcard,支持FAT32/exFAT外置卡
安卓存储格式详解
内部存储(Internal Storage)
- 用途:应用私有数据存储,仅限当前应用访问。
- 特点:
- 数据默认存放在
/data/data/<包名>/
目录下。 - 无需申请存储权限(如
READ_EXTERNAL_STORAGE
)。 - 应用卸载后数据自动清除。
- 数据默认存放在
- 操作方式:
File internalDir = getFilesDir(); // 获取内部存储目录 File file = new File(internalDir, "example.txt");
外部存储(External Storage)
- 用途:公共数据存储,可跨应用共享(如媒体文件、文档)。
- 分类:
- 私有外部存储(Scoped Storage,Android 10+):
- 路径:
/storage/emulated/0/Android/data/<包名>/
。 - 需声明
requestLegacyExternalStorage=true
或适配分区存储。
- 路径:
- 公有外部存储:
- 路径:
/storage/emulated/0/
(如Download
、Pictures
文件夹)。 - 需动态申请权限(
READ_EXTERNAL_STORAGE
、WRITE_EXTERNAL_STORAGE
)。
- 路径:
- 私有外部存储(Scoped Storage,Android 10+):
- 注意事项:
- Android 11 后,公有目录需通过
MediaStore
或Storage Access Framework
访问。
- Android 11 后,公有目录需通过
SQLite 数据库
- 用途:结构化数据存储(如用户信息、配置表)。
- 特点:
- 轻量级关系型数据库,支持 SQL 语法。
- 数据以
.db
文件形式存储在内部/外部存储中。
- 操作示例:
SQLiteDatabase db = openOrCreateDatabase("app.db", MODE_PRIVATE, null); db.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");
SharedPreferences
- 用途:轻量级键值对存储(如用户偏好设置、配置项)。
- 特点:
- 基于 XML 文件存储,默认路径为内部存储的
/shared_prefs/
。 - 适合少量简单数据(如布尔值、字符串、整数)。
- 基于 XML 文件存储,默认路径为内部存储的
- 操作示例:
SharedPreferences prefs = getSharedPreferences("config", MODE_PRIVATE); prefs.edit().putString("key", "value").apply(); // 异步提交
ContentProvider 与 网络存储
- ContentProvider:
- 用于跨应用数据共享(如读取联系人、调用系统相册)。
- 通过 URI 访问数据(如
content://contacts/people
)。
- 网络存储:
- 将数据上传至服务器(如文件、数据库备份)。
- 使用
Retrofit
、OkHttp
等库实现。
存储方式对比表
存储类型 | 数据结构 | 访问速度 | 存储容量 | 适用场景 |
---|---|---|---|---|
内部存储 | 文件/目录 | 快 | 中等 | 私密配置、临时文件 |
外部存储 | 文件/媒体 | 较快 | 大 | 多媒体文件、共享文档 |
SQLite | 表格/行 | 较慢 | 大 | 复杂查询、结构化数据 |
SharedPreferences | 键值对 | 快 | 小 | 简单配置、用户偏好 |
网络存储 | JSON/二进制 | 依赖网络 | 极大 | 云同步、多设备共享数据 |
相关问题与解答
问题1:如何选择合适的存储方式?
解答:
- 简单配置:使用
SharedPreferences
(如夜间模式开关)。 - 结构化数据:使用
SQLite
(如用户信息表)。 - 大文件或媒体:存储到外部存储(如图片、视频)。
- 跨应用共享:通过
ContentProvider
或网络存储。 - 敏感数据:优先内部存储,并加密处理。
问题2:Android 11 后如何适配外部存储权限?
解答:
- 私有外部存储:
- 默认路径改为
/storage/emulated/0/Android/data/<包名>/
。 - 无需申请
MANAGE_EXTERNAL_STORAGE
权限。
- 默认路径改为
- 公有目录访问:
- 使用
MediaStore
API 操作媒体文件。 - 或通过
ACTION_OPEN_DOCUMENT
让用户手动选择文件。
- 使用
- 动态权限申请:
- 仅在需要时申请
READ_EXTERNAL_STORAGE
(仅限特定路径)。
- 仅在需要时申请