花式解密:ViewModel用SavedState数据复用,给你无限可能
2022-11-24 10:33:14
ViewModel数据复用:巧用SavedState,让数据永不丢失
什么是ViewModel数据复用?
ViewModel是一种Android框架中强大的工具,用于管理UI和业务逻辑之间的交互。然而,其默认行为在设备配置更改时会销毁数据。数据复用是指跨越配置更改保留ViewModel数据的能力。
SavedState:数据复用的救星
为了解决ViewModel数据的配置更改问题,Android提供了SavedState。它允许在页面销毁前保存数据,并在页面重新创建后恢复这些数据,从而实现数据复用。
使用SavedState进行数据复用
使用SavedState进行数据复用非常简单:
- 在ViewModel中创建SavedStateHandle对象 :它允许存储和检索数据。
- 将数据放入SavedStateHandle对象 :将要保存的数据放入对象中。
- 在onSaveInstanceState()方法中保存数据 :将SavedStateHandle对象保存到Bundle中。
- 在onCreate()方法中恢复数据 :从Bundle中获取SavedStateHandle对象,并恢复数据。
实例演示
为了更好地理解,让我们通过一个示例来演示数据复用:
假设有一个包含列表的页面,其数据由ViewModel提供。我们需要在配置更改后保留列表数据。
// ViewModel中
private val savedStateHandle: SavedStateHandle
init {
savedStateHandle = getSavedStateHandle()
savedStateHandle["list"] = list
}
// 页面onSaveInstanceState()方法中
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
savedStateHandle.saveInstanceState(outState)
}
// 页面onCreate()方法中
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
savedStateHandle = getSavedStateHandle()
val list = savedStateHandle["list"]
}
通过这些步骤,列表数据将跨越配置更改而保存。
SavedState的广泛应用
除了数据复用,SavedState还可用于其他场景,例如:
- 保存滚动位置
- 保留输入框内容
- 存储选择器选项
结论
SavedState是实现ViewModel数据复用的有效方法,它可以让您跨越配置更改保留关键数据,从而增强用户体验和应用稳定性。
常见问题解答
-
为什么需要数据复用?
答:数据复用防止配置更改时丢失关键数据,确保用户体验的无缝衔接。 -
SavedState与ViewModel有什么不同?
答:SavedState侧重于跨越配置更改保存数据,而ViewModel用于管理UI和业务逻辑交互。 -
何时使用SavedState进行数据复用?
答:当需要在配置更改后保留特定数据时,可以使用SavedState进行数据复用,例如列表内容或表单数据。 -
SavedState有哪些局限性?
答:SavedState只能存储基本类型和Parcelable对象,对于复杂对象或大数据集可能需要其他解决方案。 -
如何提高SavedState的效率?
答:仅保存必要的最小数据集,并考虑使用轻量级Parcelable实现来优化性能。