谷歌现在似乎为此提供了一个解决方案
ViewModel 的已保存状态模块
UI State 通常存储或引用在 ViewModel 对象中,而不是活动中;因此使用 onSaveInstanceState() 需要该模块可以为您处理的一些样板文件。
设置模块后,ViewModel 对象通过其构造函数接收 SavedStateHandle 对象。这是一个键值映射,可让您在保存状态中写入和检索对象。这些值将在进程被系统终止后保持不变,并通过同一个对象保持可用。
设置
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02'
(2019 年 11 月 7 日)
用法
为了设置 ViewModel 来接收 SavedStateHandle,您需要使用扩展 AbstractSavedStateVMFactory 的工厂来创建它们。
SavedStateViewModel vm = new ViewModelProvider(this, new SavedStateVMFactory(this))
.get(SavedStateViewModel.class);
之后,您的 ViewModel 可以有一个接收 SavedStateHandle 的构造函数:
public class SavedStateViewModel extends ViewModel {
private SavedStateHandle mState;
public SavedStateViewModel(SavedStateHandle savedStateHandle) {
mState = savedStateHandle;
}
...
}
存储和检索值
SavedStateHandle类具有您期望的键值映射方法:
- 获取(字符串键)
- 包含(字符串键)
- 删除(字符串键)
- 设置(字符串键,T值)
- 键()