android - 何时调用 viewmodel onCleared

标签 android android-activity android-lifecycle android-viewmodel

ViewModel 是否独立于 Activity/fragment 生命周期或仅独立于它们的配置更改。它们何时将不复存在并调用后续的 onCleared() 方法。 viewModel 可以与其他 Activity 共享吗?

一种情况:

Activity1+viewModel1--->(rotation)--->Activity1+viewModel1
--->(launch Intent)--->Activity2+viewModel1

这种分享可行吗?这是一种好习惯吗?

此外,由于应用程序生命周期回调,onPause->onStop->onDestroy 对于两者都是相同的

1.activity旋转和

2.当一个Activity结束时,

ViewModel 如何在内部确定调用 onCleared 并最终结束其生命周期的正确时间。


调查结果:

ViewModel 在内部使用 holderFragment 来保存 Activity 的实例,并像 fragment 一样使用 setRetainInstance 方法来说明配置更改。

Source: dive-inside-of-androids-viewmodel-architecture-components

enter image description here

最佳答案

Are ViewModels independent of activity/fragment lifecycles or just their configuration changes.

ViewModel (VM) 独立于配置更改,并在销毁 Activity/fragment 时被清除。

下面是lifecycle of ViewModel来自官方网站:

ViewModel

Can the viewModel be shared with another Activity ?

您不应该对 Activity 这样做。然而, fragment 可以共享一个 ViewModel 使用它们的 Activity 范围来处理它们之间的通信

How is a ViewModel figuring out internally the right time to call onCleared and finally end its lifecycle?

当应用程序进入后台并杀死应用程序进程以释放系统内存时,会调用 VM 的 onCleared

Do ViewModels persist my data?此 Android 开发人员帖子中的部分,ViewModels: Persistence, onSaveInstanceState(), Restoring UI State and Loaders

如果您希望用户能够将应用程序置于后台,然后在三个小时后返回到完全相同的状态,您还应该持久化数据。这是因为一旦您的 Activity 进入后台,如果设备内存不足,您的应用进程就会停止。

如果应用进程和 Activity 停止,则 ViewModel 也将被清除。

关于android - 何时调用 viewmodel onCleared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50983738/

相关文章:

android - 用 CoordinatorLayout 替换 LinearLayout

android - 由 : java. lang.ClassNotFoundException 引起:在 Android 中找不到类 "java.awt.Desktop"

android - 错误状态 : field does not exist within the DocumentSnapshotPlatform . 它表明 getter 是在 null 上调用的

android - WindowManagerGlobal的setStoppedState内的IndexOutOfBoundsException

android - 应用程序生命周期,设置计时器以注销用户

Android 设置服务状态

android - 如何知道 Activity 上的哪个配置已更改?

android - 重新创建 Activity 后,我用什么来恢复它的状态?

cocoa-touch - 将 UIActivityIndi​​cator 连接到 UIButton

android - 即使 onCreateView 再次运行,按 BACK 后 View 也没有正确重新组合?