- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
尝试了解使用 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 之间的区别,这里有详细的解释:
onSavedInstanceState:onSavedInstance 的主要用途不是处理方向变化,而是提供一种机制,用于在应用程序/Activity 被 Android 系统破坏时检索数据。当应用程序处于后台并且 Android 系统决定终止它时的示例情况,因为它需要一些其他高优先级进程的内存,然后在这种情况下,在 Activity 被销毁之前 onSavedInstanceState 将被调用。
onSavedInstanceState 仅存储 Parcelable 数据,当 Activity 重新启动时,它会为用户提供恢复状态的提示。它将数据保存在系统服务器中,这是一个单独的进程。
onSavedInstanceState 有数据限制。只能保存少量的 Parcelable 数据。
对于 ViewModel
ViewModel 对象是应用程序进程内存的一部分,因此它能够在配置更改后继续存在。一旦进程终止,ViewModel 就会消失,所有保存的状态都将丢失。因此,当 Activity 重新启动时,ViewModel 中什么也没有。
它用作重物的缓存。
ViewModel 中没有任何限制。
重要:永远记住ViewModel 和SavedState 一起工作。它们不是彼此的替代品或替代品。
关于android - 架构组件 ViewModel 与 savedInstanceState 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509194/
相当简单的问题,但我无法在任何地方找到明确的答案。 fragment 的savedInstanceState和 fragment 的父activity(或封装 fragment )的savedInst
我在获取 Activity 状态时遇到问题。我有 2 个 Activity :MainActivity 和 Activity2。在 MainActivity 中,我放了一个 editText 和一个
我想在与另一台设备“同步”时获取当前系统时间。因此,此 Activity 通常在同步后立即调用/显示。 目前,当前系统时间是正确的,但我还弹出另一个 Activity 的警报,一旦我完成该 Activ
在 Google Api 示例代码中,他们有一个关于保存状态的非常简单的示例。我需要这个来处理屏幕旋转。 我的问题是我不明白方法 getSavedText() 和 setSaveText() 是从哪里
我有一个秒表应用程序,它只有一项 Activity 。三个按钮启动、停止、重置和一个显示计时器的 TextView 。这是我的代码: public class StopwatchActivity ex
我有一个 ViewPager,其中包含用户输入不同输入的一些 fragment 。其中一个 fragment 包含一个 DatePicker 和一个 TimePicker ,我将其存储(当用户选择了日
如果我没有显式调用 onSaveInstanceState(),当 onCreate 中的 savedInstanceState 不为 null 时,这是可能的吗? 我看到一个选项,当系统在崩溃后重新
所以我的 OnsavedInstanceState 中有这段代码 @Override public void onSaveInstanceState(Bundle savedInstanceState
我正在制作一个 Android 应用程序,但我一直遇到一个奇怪的错误。游戏结束后,如果您点击手机上的“返回”按钮,您将回到完成的游戏并继续玩!! 如何防止这种情况发生?有没有办法删除之前的SavedI
我刚开始使用 Android,我遇到了以下问题: 我正在尝试在打开新 Activity 时保存 InstanceState,并且我需要在 Activity 返回可见状态时恢复该状态。 这是我的 onS
在我的主要 Activity 中有一些代码说 if (savedInstanceState != null) { mCurrentSelectedPosition = save
我是 Android 的新手,我在使用 savedInstanceState 和管理生命周期时遇到了一些麻烦。 http://developer.android.com/guide/topics/fu
我有以下情况: Activity A 启动 Activity B Activity A 调用 onPause、onSaveInstanceState 和 onStop 方法。 在 Activity B
据我了解,Activity 会自动保存 View 的状态,而 EditText 和 TextView 之类的东西会自动恢复它们的状态。 这不适用于可见性吗? 例如:如果默认情况下在 XML 中,我有一
我是 Android 开发的新手,但我对 OOP 概念有一些了解。我正在尝试从 Java 的角度学习 Android。 我了解到第9行onCreate()里面的savedInstanceState是B
因此,Activity.onCreate() 将一个Bundle 作为参数,默认情况下它被称为savedInstanceState。 savedInstanceState 是否在应用更新到较新版本时保
这是我保存的InstaceState 代码: @Override public void onSaveInstanceState(Bundle savedInstanceState) { sa
我在 ViewPager 中有一个 fragment 。 Fragment 包含一个 RecyclerView(想想 ListView)。当用户离开然后返回到 fragment 时,无论用户离开列表的
我只是想通过这个简单的例子来了解 Activity 的生命周期,方法是找出如何取回 SomeIntegers g_values 对象和其中的 ArrayList AnInteger 对象。 事实上,它
我正在使用 onSaveInstanceState 方法来存储和检索 fragment 内的局部变量。我的一个 fragment 中有以下代码(简化): private final SimpleDat
我是一名优秀的程序员,十分优秀!