返回
ViewModel 是如何保存和恢复?
Android
2023-12-27 20:52:48
简介
ViewModel 是 Android Jetpack 架构组件之一,用于在配置更改(例如设备旋转)后保存和恢复 UI 状态。ViewModel 独立于视图,因此可以与不同的视图一起使用。
保存数据
要保存数据,可以在 onSaveInstanceState()
方法中使用 Bundle
对象。例如:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 保存数据到 Bundle 对象
outState.putString("myKey", "myValue");
}
恢复数据
要恢复数据,可以在 onRestoreInstanceState()
方法中使用 Bundle
对象。例如:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// 从 Bundle 对象中恢复数据
String myValue = savedInstanceState.getString("myKey");
}
使用 ViewModel 保存和恢复数据
ViewModel 提供了更简单的方法来保存和恢复数据。要使用 ViewModel 保存数据,只需在 ViewModel
类中创建一个字段。例如:
public class MyViewModel extends ViewModel {
private String myValue;
public String getMyValue() {
return myValue;
}
public void setMyValue(String myValue) {
this.myValue = myValue;
}
}
然后,可以在活动或片段中使用 ViewModel
对象来保存和恢复数据。例如:
// 获取 ViewModel 对象
MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
// 保存数据
viewModel.setMyValue("myValue");
// 恢复数据
String myValue = viewModel.getMyValue();
ViewModel 的 onCleared() 方法
ViewModel
类还提供了一个 onCleared()
方法,当 ViewModel
被销毁时会调用该方法。这可以用来清理资源,例如关闭数据库连接或网络连接。
@Override
protected void onCleared() {
super.onCleared();
// 清理资源
database.close();
networkClient.close();
}
结论
ViewModel 是一个强大的工具,可以用来保存和恢复数据。它使开发人员能够轻松地处理配置更改,例如设备旋转。