SavedStateHandle 的作用和使用方法
时间: 2023-03-27 11:05:12 浏览: 85
SavedStateHandle 是 Android Jetpack 中的一个类,用于在 Activity 或 Fragment 重建时保存和恢复数据。它可以帮助开发者在应用程序发生配置更改时,如屏幕旋转、语言切换等,保留数据状态,避免数据丢失。使用方法可以通过在 ViewModel 中创建 SavedStateHandle 实例,并将其作为参数传递给 ViewModel 构造函数,然后在 ViewModel 中使用它来保存和恢复数据。
相关问题
ViewModel和SavedStateHandle
ViewModel和SavedStateHandle是Android Jetpack库中的两个重要组件,用于处理屏幕旋转、后台杀死进程等配置变化时的数据保存和恢复。
ViewModel是一个设计模式,用于将UI的数据和逻辑与UI组件(如Activity、Fragment)解耦。它允许我们在配置变化时保留数据,并且在Activity或Fragment重新创建时恢复数据。ViewModel存储在内存中,因此适合用于保存较大的数据集或长时间加载的数据。
SavedStateHandle是ViewModel的一个辅助类,用于在配置变化时保存和恢复数据。它提供了一个类似Bundle的键值对的存储机制,可以存储和获取数据。SavedStateHandle可以在ViewModel中使用,以便在配置变化时保存和恢复数据。
使用ViewModel和SavedStateHandle的步骤如下:
1. 创建一个继承自ViewModel的类,例如MyViewModel。
2. 在MyViewModel中定义需要保存和恢复的数据。
3. 在Activity或Fragment中获取MyViewModel的实例。
4. 使用ViewModelProvider获取ViewModel实例,并使用get方法获取SavedStateHandle实例。
5. 使用SavedStateHandle实例保存和获取数据。
例如,我们可以在ViewModel中定义一个字符串数据,并使用SavedStateHandle保存和恢复它:
```
class MyViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {
private val key = "my_key"
fun saveData(data: String) {
savedStateHandle.set(key
SavedStateHandle 是什么,怎么使用
SavedStateHandle是Android Jetpack中的一个类,用于在Activity或Fragment之间保存和恢复数据。它的主要作用是帮助我们在配置更改(如屏幕旋转)等情况下保留数据。
使用SavedStateHandle非常简单。首先,在Activity或Fragment中创建一个SavedStateHandle对象,可以使用ViewModelProvider来创建它。例如,在Fragment中:
```
val viewModel: MyViewModel by viewModels()
val savedStateHandle = viewModel.savedStateHandle
```
然后,您可以使用SavedStateHandle对象来保存和恢复数据。例如,要保存一个字符串:
```
savedStateHandle.set("myString", "Hello World")
```
要检索该字符串,请使用以下代码:
```
val myString = savedStateHandle.get<String>("myString")
```
注意,这里使用了类型参数,因为SavedStateHandle可以保存任何类型的数据,但是在检索数据时,需要指定数据的类型。
除了set()和get()方法之外,SavedStateHandle还提供了许多其他有用的方法,例如contains()方法用于检查是否存在某个键,remove()方法用于删除某个键等等。
总的来说,SavedStateHandle是一种非常有用的工具,可以帮助我们更轻松地处理配置更改等情况下的数据保存和恢复。