在Android应用开发中,变量的保存策略直接影响数据的生命周期和用户体验。开发者需根据数据类型、生命周期需求和使用场景选择合适方法。本文系统梳理七种核心存储方案,并附对比表格。

此类方案适用于需长期保留的数据,不受应用进程生命周期影响。
轻量级键值对存储,适用于简单配置数据:
// 写入数据
val prefs = getSharedPreferences("config", Context.MODE_PRIVATE)
prefs.edit().putString("username", "user123").apply()
// 读取数据
val userName = prefs.getString("username", "default")
适用于非结构化大数据,分两种类型:
通过Room持久化库实现结构化数据管理:
@Entity
data class User(
@PrimaryKey val id: Int,
val name: String
)
@Dao
interface UserDao {
@Insert
fun insert(user: User)
}
Jetpack组件,支持协程异步操作:
val dataStore = context.createDataStore(name = "settings")
dataStore.edit { settings ->
settings[intPreferencesKey("counter")] = 1
}
此类数据仅存活于特定生命周期范围内。
管理UI相关数据,屏幕旋转时自动保留:
class MyViewModel : ViewModel() {
private val _counter = MutableLiveData()
val counter: LiveData = _counter
}
处理Activity重建时的临时数据:
class StateViewModel(savedState: SavedStateHandle) : ViewModel() {
val data = savedState.getLiveData("key")
}
Activity/Fragment间传递数据:
val bundle = Bundle().apply {
putString("key", "value")
}
通过Application类实现跨组件共享:
class MyApp : Application() {
lateinit var globalConfig: GlobalConfig
}
| 存储方式 | 数据类型 | 生命周期 | 数据限制 | 典型场景 |
|---|---|---|---|---|
| SharedPreferences | 键值对 | 持久化 | KB级 | 用户设置 |
| Room数据库 | 结构化 | 持久化 | GB级 | 用户数据记录 |
| ViewModel | 任意对象 | 界面存活期 | MB级 | 界面状态 |
| Bundle | 基本类型 | 单次传递 | KB级 | 组件通信 |
| DataStore | 键值对 | 持久化 | KB级 | 替代SharedPreferences |
1. 生命周期匹配:界面状态用ViewModel,用户配置用DataStore
2. 数据类型适配:结构化数据首选Room,小数据用SharedPreferences
3. 性能考量:避免主线程执行I/O操作,DataStore支持异步API
4. 安全性:敏感数据使用EncryptedSharedPreferences或Jetpack Security
跨进程传递数据时需实现Parcelable接口:
data class CustomData(
val id: Int,
val content: String
) : Parcelable {
// Parcelable实现代码
}
通过合理选择变量存储策略,可显著提升应用性能和用户体验。建议新项目优先采用ViewModel+DataStore+Room的Jetpack现代化方案组合。