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

安卓开发数据都是存在哪里的

安卓数据存储的主要位置

内部存储(Internal Storage)

  • 路径/data/data/<包名>/
  • 特点
    • 应用私有,其他应用无法访问
    • 无需申请存储权限
    • 卸载应用时自动清除
  • 适用场景
    • 存储敏感配置信息
    • 缓存应用专属数据
  • 操作方式
    // 写入内部存储
    File file = new File(getFilesDir(), "config.txt");
    // 读取内部存储
    File file = new File(getFilesDir(), "config.txt");

外部存储(External Storage)

  • 路径
    • 传统路径:/mnt/sdcard/Environment.getExternalStorageDirectory()
    • Android 10+:/storage/emulated/0/
  • 特点
    • 可被用户通过文件管理器访问
    • 需要动态申请WRITE_EXTERNAL_STORAGE权限(Android 10+需特殊处理)
    • 可能被用户手动删除
  • 适用场景
    • 媒体文件(图片、视频、文档)
    • 应用间共享文件
  • 操作限制
    • Android 10+ 启用Scoped Storage,应用只能访问自己的专属目录
    • 需处理ScopedFS兼容性问题

SQLite数据库

  • 路径/data/data/<包名>/databases/
  • 特点
    • 轻量级关系型数据库
    • 支持SQL语句操作
    • 默认仅限本应用访问
  • 操作方式
    // 创建数据库
    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("app.db", null);
    // 执行SQL
    db.execSQL("CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT)");

SharedPreferences

  • 存储位置/data/data/<包名>/shared_prefs/
  • 特点
    • 键值对存储(支持String/Int/Boolean等基本类型)
    • 异步提交优化
    • 自动序列化对象(需实现Parcelable
  • 适用场景

    轻量级配置信息(如用户设置、登录状态)

    安卓开发数据都是存在哪里的  第1张

  • 操作示例
    // 写入
    SharedPreferences prefs = getSharedPreferences("config", MODE_PRIVATE);
    prefs.edit().putString("key", "value").apply();
    // 读取
    String value = prefs.getString("key", "default");

缓存(Cache)

  • 路径
    • 内存缓存:LruCache/BitmapCache
    • 磁盘缓存:getCacheDir()/data/data/<包名>/cache/
  • 特点
    • 系统可自动清理(如内存不足时)
    • 适合临时数据(如图片缓存、网络响应)
  • 操作注意
    • 需处理onTrimMemory()回调
    • 避免存储关键业务数据

数据存储方式对比表

存储类型 持久性 访问范围 适用数据类型 典型API
内部存储 本应用 任意文件类型 getFilesDir()/openFileOutput()
外部存储 所有应用(需权限) 媒体文件、文档 getExternalFilesDir()
SQLite数据库 本应用 结构化数据 SQLiteDatabase
SharedPreferences 本应用 键值对(<1MB) getSharedPreferences()
缓存 本应用 临时文件/内存数据 getCacheDir()/LruCache
网络存储 可配置 服务器端 任意类型(需序列化) Retrofit/OkHttp

相关问题与解答

Q1:如何选择内部存储与外部存储?

A:根据数据敏感性和共享需求:

  • 内部存储:存储敏感数据(如用户token)、应用核心配置,避免被其他应用或用户直接访问。
  • 外部存储:存储媒体文件(如图片、视频)、需要跨设备同步或用户可管理的文件。
  • 注意:Android 10+ 对外部存储有严格限制,建议优先使用MediaStore API或应用专属外部存储目录。

Q2:如何保护SQLite数据库的安全性?

A

  1. 文件加密:使用AES加密数据库文件(如SQLCipher库)。
  2. 权限控制:设置数据库文件为MODE_PRIVATE,避免其他应用访问。
  3. 密钥管理:将加密密钥存储在Keystore系统,而非硬编码。
  4. 备份防护:禁用自动备份(android:allowBackup="false")或加密备份数据
0