gpt4 book ai didi

android - 架构组件 ViewModel 与 savedInstanceState 包

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:36 24 4
gpt4 key购买 nike

尝试了解使用 ViewModel 保留 Activity 或 fragment 的某些状态并使用 savedInstanceState 包保存它们的区别。

给人的印象是,在配置更改等情况下,当操作系统销毁 Activity/fragment 时,ViewModel 实例会保持 Activity 状态,这样当操作系统重新创建 Activity/fragment 时, Activity/fragment 可以从仍然有效的 ViewModel 实例中获取数据。

它是否适用于最小化应用程序并重新打开它?

做了一些测试,似乎最小化应用程序并重新打开应用程序,操作系统将重新创建 Activity/fragment ,其中 onCreate() 中的 stavedInstanceState 包不为空(调用 onSaveInstanceStae() 时保存的任何内容)。但是 ViewModel 已被清除,因此创建了一个没有先前数据的新实例。

这是否意味着虽然在这种情况下 os 可以检索保存的实例状态并传递给 Activity/fragment 的 onCreate(),但是 ViewModel 必须是没有先前实例数据的新实例,或者 viewModel 需要做为了跨实例存储/恢复数据需要一些额外的步骤吗?

最佳答案

如果有人仍然想了解 onSavedState 与 ViewModel 之间的区别,这里有详细的解释:

  1. onSavedInstanceState:onSavedInstance 的主要用途不是处理方向变化,而是提供一种机制,用于在应用程序/Activity 被 Android 系统破坏时检索数据。当应用程序处于后台并且 Android 系统决定终止它时的示例情况,因为它需要一些其他高优先级进程的内存,然后在这种情况下,在 Activity 被销毁之前 onSavedInstanceState 将被调用。

  2. onSavedInstanceState 仅存储 Parcelable 数据,当 Activity 重新启动时,它会为用户提供恢复状态的提示。它将数据保存在系统服务器中,这是一个单独的进程。

  3. onSavedInstanceState 有数据限制。只能保存少量的 Parcelable 数据。

对于 ViewModel

  1. ViewModel 对象是应用程序进程内存的一部分,因此它能够在配置更改后继续存在。一旦进程终止,ViewModel 就会消失,所有保存的状态都将丢失。因此,当 Activity 重新启动时,ViewModel 中什么也没有。

  2. 它用作重物的缓存。

  3. ViewModel 中没有任何限制。

重要:永远记住ViewModel 和SavedState 一起工作。它们不是彼此的替代品或替代品。

enter image description here

关于android - 架构组件 ViewModel 与 savedInstanceState 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509194/

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