SharedPreferences 是 Android 中常用的轻量级数据存储方式,适用于保存应用的配置信息或用户偏好设置。在基础用法之外,掌握以下高级技巧能显著提升数据管理能力:
1. 加密存储敏感数据 🔒
使用 SecretKeySpec
和 AES 加密算法对存储内容进行加密,避免明文保存密码、token 等敏感信息。
示例代码片段:
String encryptedData = encrypt("my_sensitive_data", "secret_key");
SharedPreferences.Editor editor = getSharedPreferences("my_app", MODE_PRIVATE).edit();
editor.putString("encrypted_key", encryptedData);
editor.apply();
2. 多模式处理 🔄
通过 MODE_PRIVATE
、MODE_APPEND
等模式控制数据读写行为:
MODE_PRIVATE
:默认模式,仅当前应用可读写MODE_APPEND
:追加模式,保留原有数据MODE_WORLD_READABLE
/MODE_WORLD_WRITEABLE
:允许其他应用访问(已弃用,慎用)
⚠️ 注意:Android 10+ 系统中,MODE_WORLD_READABLE
等模式可能因权限策略失效。
3. 支持复杂数据类型 🧮
除了基本类型,可通过 Gson
或 Parcelize
存储对象:
val user = User("Alice", 25)
val editor = getSharedPreferences("my_app", Context.MODE_PRIVATE).edit()
editor.putString("user_data", Gson().toJson(user))
editor.apply()
4. 数据备份与迁移 🧱
通过 BackupManager
实现跨设备数据同步,或使用 Migration
工具处理数据格式升级。
📌 延伸阅读:Android 数据备份最佳实践
5. 性能优化技巧 ⚡
- 避免频繁调用
apply()
或commit()
,建议批量操作 - 使用
SharedPreferences.Editor
的putStringSet()
存储集合数据 - 对大数据量场景考虑使用 SQLite 或 Room 数据库
6. 常见问题排查 🛠
- 数据丢失:检查
MODE_PRIVATE
是否正确,确保应用包名一致 - 权限冲突:在 Android 10+ 中使用
Scoped Storage
时需适配 - 版本兼容性:使用
Migration
处理 SharedPreferences 文件格式变更
如需进一步了解数据迁移方案,可访问 SharedPreferences 迁移指南