当前位置:首页 > 行业动态 > 正文

安卓存储格式

安卓存储格式主要为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)

  • 用途:公共数据存储,可跨应用共享(如媒体文件、文档)。
  • 分类
    1. 私有外部存储(Scoped Storage,Android 10+):
      • 路径:/storage/emulated/0/Android/data/<包名>/
      • 需声明 requestLegacyExternalStorage=true 或适配分区存储。
    2. 公有外部存储
      • 路径:/storage/emulated/0/(如 DownloadPictures 文件夹)。
      • 需动态申请权限(READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE)。
  • 注意事项
    • Android 11 后,公有目录需通过 MediaStoreStorage Access Framework 访问。

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/
    • 适合少量简单数据(如布尔值、字符串、整数)。
  • 操作示例
    SharedPreferences prefs = getSharedPreferences("config", MODE_PRIVATE);
    prefs.edit().putString("key", "value").apply(); // 异步提交

ContentProvider 与 网络存储

  • ContentProvider
    • 用于跨应用数据共享(如读取联系人、调用系统相册)。
    • 通过 URI 访问数据(如 content://contacts/people)。
  • 网络存储
    • 将数据上传至服务器(如文件、数据库备份)。
    • 使用 RetrofitOkHttp 等库实现。

存储方式对比表

存储类型 数据结构 访问速度 存储容量 适用场景
内部存储 文件/目录 中等 私密配置、临时文件
外部存储 文件/媒体 较快 多媒体文件、共享文档
SQLite 表格/行 较慢 复杂查询、结构化数据
SharedPreferences 键值对 简单配置、用户偏好
网络存储 JSON/二进制 依赖网络 极大 云同步、多设备共享数据

相关问题与解答

问题1:如何选择合适的存储方式?

解答

  • 简单配置:使用 SharedPreferences(如夜间模式开关)。
  • 结构化数据:使用 SQLite(如用户信息表)。
  • 大文件或媒体:存储到外部存储(如图片、视频)。
  • 跨应用共享:通过 ContentProvider 或网络存储。
  • 敏感数据:优先内部存储,并加密处理。

问题2:Android 11 后如何适配外部存储权限?

解答

  1. 私有外部存储
    • 默认路径改为 /storage/emulated/0/Android/data/<包名>/
    • 无需申请 MANAGE_EXTERNAL_STORAGE 权限。
  2. 公有目录访问
    • 使用 MediaStore API 操作媒体文件。
    • 或通过 ACTION_OPEN_DOCUMENT 让用户手动选择文件。
  3. 动态权限申请
    • 仅在需要时申请 READ_EXTERNAL_STORAGE(仅限特定路径)。
0