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

安卓存储sp

安卓SP(SharedPreferences)是轻量级键值存储,用于保存简单配置数据(如用户设置、登录状态),支持基本数据类型,数据默认存于应用私有目录,可指定文件名实现多组配置管理

SharedPreferences(SP)基础详解

基本概念

SharedPreferences 是 Android 提供的轻量级键值对存储工具,主要用于保存简单的配置信息(如用户偏好设置、登录状态等),数据以 XML 文件SQLite 数据库 形式存储在设备内部目录中,适合存储少量、简单的数据。

安卓存储sp


核心使用步骤

步骤 方法/说明 示例代码
获取实例 getSharedPreferences(String name, int mode)
name: 文件名
mode: 操作模式(如 MODE_PRIVATE
“`java

SharedPreferences sp = getSharedPreferences(“config”, Context.MODE_PRIVATE);

安卓存储sp

| 2. 读取数据 | `getX(String key)`<br>支持 `String`、`int`、`float`、`long`、`boolean` 等类型 | ```java
String value = sp.getString("key_name", "default_value");
``` |
| 3. 写入数据 | `edit()` → `putX(String key, X value)` → `apply()` 或 `commit()`<br>`apply()`: 异步提交<br>`commit()`: 同步提交 | ```java
SharedPreferences.Editor editor = sp.edit();
editor.putInt("key_age", 25);
editor.apply(); // 推荐使用
``` |
---
# 三、支持的数据类型
| 数据类型 | 写入方法 | 读取方法 | 说明 |
|----------|----------|----------|------|
| String   | putString(key, value) | getString(key, defValue) | 常用类型 |
| int      | putInt(key, value)    | getInt(key, defValue)     |         |
| float    | putFloat(key, value)  | getFloat(key, defValue)   |         |
| long     | putLong(key, value)   | getLong(key, defValue)    |         |
| boolean  | putBoolean(key, value)| getBoolean(key, defValue) |         |
---
# 四、注意事项
1. 线程安全  
   `apply()` 是异步操作,适合大多数场景;`commit()` 是同步操作,可能阻塞主线程。
   多线程操作时建议加锁或使用 `apply()`。
2. 性能问题  
   SP 文件读写会触发 I/O 操作,频繁调用可能导致性能下降。
   建议批量操作(如多次 `put` 后统一 `apply()`)。
3. 数据迁移与兼容性  
   新增键值对时需考虑旧版本兼容性(如设置默认值)。
   删除文件需谨慎(`getSharedPreferences` 会自动创建文件)。
4. 存储复杂对象  
   仅支持基础数据类型,存储对象需手动序列化(如 `Gson` 转 JSON 字符串)。
---
# 五、与其他存储方式对比
| 特性          | SharedPreferences       | 文件存储(File)       | SQLite 数据库         |
|---------------|-------------------------|------------------------|-----------------------|
| 适用场景   | 轻量级键值配置          | 文本/二进制文件存储     | 复杂结构化数据        |
| 数据格式   | 键值对(XML/SQLite)    | 自由格式               | 关系型表             |
| 性能      | 高(少量数据)          | 中等                   | 低(大量数据)        |
| 开发复杂度 | 极低                    | 低                     | 较高                 |
---
 相关问题与解答
# 问题1:SharedPreferences 是否适合存储大量数据?
解答:  
不适合,SharedPreferences 设计用于存储少量键值对,大量数据会导致以下问题:
性能下降(每次读写需加载整个文件)
文件体积过大,占用更多内存和存储空间  
建议:超过百条数据时考虑使用 SQLite 或 Room 持久化库。
---
# 问题2:如何迁移 SharedPreferences 数据到新版本?
解答:  
1. 新增键值对:在代码中检查键是否存在,不存在则赋予默认值。  
   ```java
   int versionCode = BuildConfig.VERSION_CODE;
   if (sp.getInt("config_version", 0) < versionCode) {
       // 执行数据迁移逻辑
       sp.edit().putInt("config_version", versionCode).apply();
   }
  1. 删除旧文件:通过 getSharedPreferences 自动创建新文件,旧文件会被系统清理(需用户卸载重装或手动清除数据