安卓存储分文件存储(内部/外部)、SQLite数据库、SharedPreferences、网络存储及ContentProvider数据共享,共5类
安卓存储类型详解
内部存储(Internal Storage)
- 用途:应用私有数据存储,仅限本应用访问。
- 权限:无需申请,系统自动分配。
- 路径:
/data/data/<包名>/
。
- 特点:
- 数据默认私有化,其他应用无法读取。
- 适合存储敏感配置、数据库、缓存等。
- 示例场景:保存用户登录凭证、应用配置文件。
外部存储(External Storage)
- 用途:公共存储空间,可跨应用共享文件。
- 权限:
- Android 10前:需
READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
。
- Android 10+(Scoped Storage):细分权限,仅能访问应用安装目录或媒体文件。
- 路径:
/storage/emulated/0/
(类似/sdcard
)。
- 特点:
- 文件可被用户或其他应用删除、修改。
- 适合媒体文件、下载内容等非敏感数据。
- 示例场景:下载的图片、视频、文档存储。
SD卡存储(可移除存储)
- 用途:扩展存储,通常用于大容量文件。
- 权限:同外部存储,需动态申请。
- 路径:
/mnt/media_rw/
或/storage/xxx
(取决于挂载点)。
- 特点:
- 存储卡可能被移除或格式化,需做好数据备份。
- Android 6.0+需动态检测SD卡状态。
- 示例场景:离线地图数据、大文件备份。
应用专属外部存储(Android 10+)
- 用途:Scoped Storage机制下的私有外部存储空间。
- 权限:无需申请
READ_EXTERNAL_STORAGE
,仅能访问自身目录。
- 路径:
/storage/emulated/0/Android/data/<包名>/
。
- 特点:
- 提升隐私性,应用间无法直接访问彼此文件。
- 兼容旧版存储路径需通过
MediaStore
API。
- 示例场景:替代传统外部存储,适应新版本合规要求。
数据库存储(SQLite)
- 用途:结构化数据存储,支持增删改查。
- 路径:默认存放在内部存储的
/data/data/<包名>/databases/
。
- 特点:
- 适合复杂数据关系(如用户信息、订单记录)。
- 需手动管理增删改操作。
- 示例场景:社交应用的好友列表、电商App的订单管理。
轻量级键值存储(SharedPreferences)
- 用途:简单键值对存储,适用于配置信息。
- 路径:内部存储的
/data/data/<包名>/shared_prefs/
。
- 特点:
- 性能高,适合少量配置数据(如用户设置、登录状态)。
- 不支持复杂数据结构。
- 示例场景:保存用户主题偏好、语言设置。
存储类型对比表
存储类型 |
私有化 |
权限需求 |
适用场景 |
路径示例 |
内部存储 |
是 |
无 |
敏感数据、配置 |
/data/data/<包名>/ |
外部存储 |
否 |
Android 10+:细分权限 |
媒体文件、公开下载内容 |
/storage/emulated/0/ |
SD卡存储 |
否 |
同外部存储 |
大容量文件、可移除数据 |
/mnt/media_rw/ |
应用专属外部存储 |
是 |
无(仅限自身目录) |
兼容Android 10+的外部文件 |
/storage/emulated/0/Android/data/<包名>/ |
SQLite数据库 |
是 |
无 |
结构化数据 |
/data/data/<包名>/databases/ |
SharedPreferences |
是 |
无 |
简单键值配置 |
/data/data/<包名>/shared_prefs/ |
相关问题与解答
问题1:Android 10的Scoped Storage如何影响外部存储访问?
解答:
Android 10引入Scoped Storage后,应用默认只能访问自身创建的文件和媒体目录(如图片、音频),若需访问全盘文件,需在AndroidManifest.xml
中声明requestLegacyExternalStorage=true
(临时兼容),或通过Storage Access Framework
让用户手动授权,长期建议迁移至应用专属目录或使用MediaStore API。

问题2:如何选择内部存储与外部存储?
解答:

- 内部存储:存储敏感数据(如用户token、加密配置),无需权限,数据安全但空间有限。
- 外部存储:存储非敏感文件(如图片、视频),可跨应用共享,但需处理权限和文件被删除的风险。
- 原则:优先内部存储保障安全,若文件需共享或体积较大(如下载文件)则用外部存储