SavedStateHandle不持久化数据

2024-05-09

我按照下一页中的说明创建了一个 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 仅在第一步中保留数据:

  1. 系统杀死该进程。应用程序保留在最近使用的屏幕中。数据由 SavedStateHandle 保存(或者在 EditText 的情况下,由 savingInstanceState 中的视图保存,请参阅 Codelab)。
  2. 系统完成应用程序。应用程序已从最近使用的屏幕中删除。 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(使用前将#替换为@)

SavedStateHandle不持久化数据 的相关文章

随机推荐