原理:基于XML文件存储,以键值对形式保存简单数据(如布尔值、整数、字符串等)。
适用场景:用户偏好设置、简单配置信息(如是否开启通知、主题模式等)。
特点:
application
或activity
为作用域。示例代码:
// 写入数据 SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE); sp.edit().putString("username", "admin").apply(); // 读取数据 String username = sp.getString("username", "default");
原理:通过File
类直接读写文件,支持文本(如CSV、JSON)或二进制格式(如图片、音频)。
适用场景:存储多媒体文件、日志、临时缓存文件等。
特点:
InternalStorage
或ExternalStorage
)。READ_EXTERNAL_STORAGE
/WRITE_EXTERNAL_STORAGE
)。示例代码:
// 写入文本文件 try (FileOutputStream fos = openFileOutput("data.txt", MODE_PRIVATE)) { fos.write("Hello World".getBytes()); } // 读取文本文件 try (FileInputStream fis = openFileInput("data.txt")) { int ch; while ((ch = fis.read()) != -1) { // 处理字符 } }
原理:基于关系型数据库,通过SQLiteOpenHelper
管理数据库创建与升级。
适用场景:复杂数据结构(如用户信息表、订单表)、多表关联查询。
特点:
onUpgrade
方法)。示例代码:
// 创建表 SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)"); // 插入数据 ContentValues values = new ContentValues(); values.put("name", "Alice"); db.insert("users", null, values);
ContentProvider
类并定义URI路由。MediaStore
、ContactsContract
)。// 查询联系人 Uri uri = ContactsContract.Contacts.CONTENT_URI; Cursor cursor = getContentResolver().query(uri, null, null, null, null);
// Retrofit调用API Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService service = retrofit.create(ApiService.class); service.getUserData(userId).enqueue(new Callback<User>() { ... });
@Entity
定义表,@Dao
定义操作,RoomDatabase
管理实例。支持实时更新的嵌入式数据库,适合高频写操作。
替代SharedPreferences,支持类型安全和协议缓冲。
存储方式 | 数据类型 | 持久化 | 适用场景 | 优点 | 缺点 |
---|---|---|---|---|---|
SharedPreferences | 键值对(简单类型) | 是 | 用户偏好、配置 | 操作简单,性能高 | 仅限简单数据 |
文件存储 | 文本/二进制 | 是 | 多媒体、日志、缓存文件 | 灵活,支持大文件 | 需处理权限和路径 |
SQLite | 结构化数据(表/关系) | 是 | 复杂业务数据 | 强大查询能力 | 学习成本高,需手动管理 |
ContentProvider | URI指向的数据 | 是 | 跨应用共享数据 | 标准化接口,安全性高 | 实现复杂 |
网络存储 | 云端数据(JSON/二进制) | 是 | 跨设备同步、后端服务交互 | 数据可共享,无本地限制 | 依赖网络,延迟较高 |
第三方库(Room) | 结构化数据(对象映射) | 是 | 现代SQLite操作 | 类型安全,编译时校验 | 需学习新框架 |
解答:
SharedPreferences
(如夜间模式设置)。Pictures
目录)。Room
或SQLite(如用户信息、订单记录)。ContentProvider
或云存储(如上传文件到服务器)。Realm
或内存缓存(如临时计算结果)。解答:
SQLite
的事务)、缓存常用数据。AsyncTask
或Coroutine
避免阻塞主线程。LruCache
缓存频繁访问的数据(如图片加载)。