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

安卓开发中有哪三种数据存储方式

安卓三种存储方式:SharedPreferences存配置,SQLite存结构化数据,文件存储存多媒体等

安卓三种数据存储方式详解

SharedPreferences(共享偏好)

特点

  • 基于键值对存储(Key-Value)
  • 仅支持基本数据类型(如intfloatStringboolean等)
  • 数据以XML文件形式存储在应用私有目录
  • 默认是异步提交,支持apply()同步提交

适用场景

  • 轻量级配置信息(如用户设置、登录状态)
  • 少量简单数据的持久化

示例代码

// 获取SharedPreferences对象
SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
// 写入数据
sp.edit()
  .putString("username", "admin")
  .putInt("age", 25)
  .apply(); // 提交修改
// 读取数据
String username = sp.getString("username", "default");
int age = sp.defaultAppConfig.getInt("age", 0);

优点

  • 简单易用,无需创建数据库或文件
  • 自动处理数据序列化和反序列化

缺点

  • 仅支持简单数据类型,无法存储复杂对象
  • 不适合大量数据存储

SQLite数据库

特点

  • 轻量级关系型数据库
  • 数据以二维表形式存储,支持SQL查询
  • 存储在应用私有目录(/data/data/包名/databases/
  • 需手动创建和管理数据库及表结构

适用场景

  • 结构化数据存储(如用户信息、订单记录)
  • 需要复杂查询或关联操作的场景

示例代码

// 创建数据库帮助类
public class DBHelper extends SQLiteOpenHelper {
    public DBHelper(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)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
// 增删改查操作
DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL("INSERT INTO user (name) VALUES ('Alice')");
Cursor cursor = db.query("user", null, null, null, null, null, null);

优点

  • 支持复杂数据结构和SQL操作
  • 数据持久化,适合大量数据存储

缺点

  • 需要手动管理数据库生命周期
  • 学习成本较高(需熟悉SQL语法)

文件存储(Internal/External Storage)

特点

  • 直接读写文件(如文本、二进制文件)
  • 分为内部存储(应用私有)和外部存储(公共空间)
  • 内部存储无需申请权限,外部存储需动态申请WRITE_EXTERNAL_STORAGE

适用场景

  • 存储多媒体文件(图片、视频、音频)
  • 缓存大型配置文件或日志文件

示例代码

// 写入内部存储文件
File file = new File(getFilesDir(), "data.txt");
try (FileOutputStream fos = new FileOutputStream(file)) {
    fos.write("Hello World".getBytes());
}
// 读取内部存储文件
byte[] buffer = new byte[1024];
try (FileInputStream fis = new FileInputStream(file)) {
    int len = fis.read(buffer);
    String content = new String(buffer, 0, len);
}

优点

  • 支持任意格式文件(如JSON、XML、图片)
  • 简单文件操作API,易于使用

缺点

  • 需自行处理文件路径和IO异常
  • 外部存储受存储空间和权限限制

数据存储方式对比表

特性 SharedPreferences SQLite 文件存储
数据类型 基本类型 结构化数据 任意格式文件
持久性
操作复杂度 低(文件IO)
适用场景 轻量配置 复杂数据 大文件/多媒体
存储容量 中等
线程安全 否(需加锁)

相关问题与解答

问题1:如何根据数据类型选择合适的存储方式?

解答

  • 简单配置(如开关状态、用户名):使用SharedPreferences
  • 结构化数据(如用户表、订单记录):使用SQLite
  • 大文件或二进制数据(如图片、视频):使用文件存储
  • 临时缓存(如Bitmap):可考虑内存缓存或File的缓存目录

问题2:SharedPreferences的commit()apply()有什么区别?

解答

  • commit():同步提交,返回boolean表示成功/失败,会阻塞主线程。
  • apply():异步提交,无返回值,不会阻塞主线程,性能更优。
    建议:非必要情况优先使用apply(),避免UI卡