gpt4 book ai didi

android-viewmodel - SavedStateHandle 不持久化数据

转载 作者:行者123 更新时间:2023-12-05 01:57:06 28 4
gpt4 key购买 nike

我按照下一页中的说明创建了一个 viewModel,但是当我关闭应用程序并再次打开它时,SavedStateHandle 不起作用。

这是页面:

Saved State module for ViewModel

这是我的 View 模型类:

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 只在第一步持久化数据:

  1. 系统终止进程。应用程序保留在最近使用的屏幕中。数据由 SavedStateHandle 保存(或在 EditText 的情况下由 savedInstanceState 中的 View 保存,请参阅代码实验室)。
  2. 系统完成应用程序。应用程序已从最近使用屏幕中删除。 SavedStateHandle 中的数据消失了,就像用户完成了应用程序一样。

结论:如果你想在第 2 步中持久化你的数据,那么使用比 SavedStateHandle 更持久的东西。

----结束编辑----

我在代码实验室 ( https://developer.android.com/codelabs/android-lifecycles#6 ) 中做了类似的事情。

正如 OP 所描述的那样,将 LiveData 存储在 SavedStateHandle 中对我来说没有任何区别。当系统完成应用程序(已编辑,原文为:终止进程)时,存储在 SavedStateHandle 中的 LiveData 消失了。

我没有更改任何依赖项。我用的是北极狐2020.3.1中的一个模板(底部导航模板)。它可以很好地编译以将 SavedStateHandle 添加到 AndroidViewModel 子类,但它不会保存 LiveData。

关于android-viewmodel - SavedStateHandle 不持久化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69505729/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com