我按照下一页中的说明创建了一个 viewModel,但是SavedStateHandle
当我关闭应用程序并再次打开它时不起作用。
这是页面:
ViewModel 的已保存状态模块 https://developer.android.com/topic/libraries/architecture/viewmodel-savedstate
这是我的视图模型类:
class UserViewModel(private val state : SavedStateHandle) : ViewModel(){
val userId: LiveData<String> by lazy {
state.getLiveData("userId")
}
fun setUserId(userId : String) {
state["userId"] = userId
}
val user : User by lazy {
User("")
} }
以下是我在活动中使用 viewModel 的方式。
val userViewModel : UserViewModel by viewModels()
我什至在我的活动中尝试过这个,但这也不起作用!
val userViewModel: UserViewModel by viewModels {
SavedStateViewModelFactory(
application,
this
)
我应该怎么做才能将数据保存在SavedStateHandle
?我的意思是,打开应用程序后state
仍然是空的。
- - 编辑: - -
系统似乎分两步释放内存,而 SavedStateHandle 仅在第一步中保留数据:
- 系统杀死该进程。应用程序保留在最近使用的屏幕中。数据由 SavedStateHandle 保存(或者在 EditText 的情况下,由 savingInstanceState 中的视图保存,请参阅 Codelab)。
- 系统完成应用程序。应用程序已从最近使用的屏幕中删除。 SavedStateHandle 中的数据消失了,就像用户完成了应用程序一样。
结论:如果您想在第 2 步中保留数据,请使用比 SavedStateHandle 更持久的东西。
---- 编辑结束 ----
我做了与代码实验室类似的事情(https://developer.android.com/codelabs/android-lifecycles#6 https://developer.android.com/codelabs/android-lifecycles#6).
正如OP所描述的那样(对我来说)将LiveData存储在SavedStateHandle中没有任何区别。当系统完成应用程序时(编辑,原文是:杀死进程),存储在 SavedStateHandle 中的 LiveData 就消失了。
我没有更改任何依赖项。我使用的是Arctic Fox 2020.3.1中的模板(底部导航模板)。它编译良好,将 SavedStateHandle 添加到 AndroidViewModel 子类,但它不保存 LiveData。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)