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

安卓存储方式

安卓存储方式包括内部存储(系统与应用数据)、外部存储(如SD卡)、SQLite数据库(结构化数据)、SharedPreferences(键值对配置)及网络云存储,支持本地与云端数据

安卓存储方式详解

内部存储(Internal Storage)

  • 特点

    • 应用私有,其他应用或用户无法直接访问。
    • 数据随应用卸载自动清除。
    • 无需申请存储权限(如WRITE_EXTERNAL_STORAGE)。
  • 适用场景

    存储敏感配置、缓存文件、临时数据。

  • 操作方式

    安卓存储方式

    // 写入内部存储
    File file = new File(getFilesDir(), "config.txt");
    FileOutputStream fos = new FileOutputStream(file);
    fos.write("data".getBytes());
    fos.close();
    // 读取内部存储
    FileInputStream fis = new FileInputStream(file);
    BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
    String line = reader.readLine();

外部存储(External Storage)

  • 特点
    • 可被用户或其他应用访问(需权限)。
    • 数据不会随应用卸载自动删除。
    • Android 10+ 需适配“分区存储”(Scoped Storage)。
  • 适用场景

    媒体文件、下载内容、跨应用共享数据。

  • 权限管理
    • 写入:MANAGE_EXTERNAL_STORAGE(Android 11+)或 WRITE_EXTERNAL_STORAGE(旧版本)。
    • 读取:READ_EXTERNAL_STORAGE(Android 10+ 已废弃,改用MediaStore API)。
  • 操作示例
    // 写入公共外部存储(需权限)
    File publicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    File file = new File(publicDir, "image.jpg");

SQLite数据库

  • 特点
    • 轻量级关系型数据库,支持SQL查询。
    • 数据以文件形式存储在内部/外部存储中。
  • 适用场景

    结构化数据存储(如用户信息、订单记录)。

  • 操作步骤
    1. 创建/打开数据库:SQLiteOpenHelper
    2. 定义表结构并执行CRUD操作。
      // 创建数据库帮助类
      public class DatabaseHelper extends SQLiteOpenHelper {
       public DatabaseHelper(Context context) {
           super(context, "app.db", null, 1);
       }
       @Override
       public void onCreate(SQLiteDatabase db) {
           db.execSQL("CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT)");
       }
       // 其他方法省略
      }

SharedPreferences

  • 特点

    安卓存储方式

    • 基于XML的键值对存储,接口简单。
    • 适用于少量配置数据(如用户设置、登录状态)。
  • 操作方式

    // 写入数据
    SharedPreferences prefs = getSharedPreferences("config", MODE_PRIVATE);
    prefs.edit().putString("key", "value").apply();
    // 读取数据
    String value = prefs.getString("key", "default");

ContentProvider(内容提供者)

  • 特点
    • 跨应用数据共享的标准接口。
    • 支持URI定位数据,可自定义权限。
  • 适用场景

    对外提供数据(如通讯录、媒体库)。

  • 示例
    // 读取联系人数据
    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);

存储方式对比表

存储类型 数据持久性 访问权限 适用数据类型 典型用途
内部存储 高(随应用) 仅限本应用 文件、二进制数据 配置文件、缓存
外部存储 低(手动删除) 所有应用/用户 媒体、大文件 图片、视频、文档
SQLite数据库 仅限本应用 结构化数据 用户信息、订单记录
SharedPreferences 仅限本应用 键值对(字符串、布尔等) 用户设置、登录状态
ContentProvider 依赖实现 可自定义 多种(通过URI) 跨应用数据共享

相关问题与解答

问题1:如何选择不同的存储方式?

解答

安卓存储方式

  • 敏感数据(如用户token):优先使用内部存储或加密SQLite。
  • 大量非敏感数据(如图片):使用外部存储或云存储。
  • 简单配置(如开关状态):使用SharedPreferences。
  • 跨应用共享:通过ContentProvider或外部存储(需处理权限)。

问题2:Android 10+的分区存储如何影响外部存储?

解答

  • 限制:应用默认只能访问自身创建的文件或媒体库中的文件。
  • 解决方案
    • 使用MediaStore API保存媒体文件。
    • 请求MANAGE_EXTERNAL_STORAGE权限(需谨慎,可能被拒审)。
    • 引导用户手动授权特定文件访问(不推荐