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
最佳答案
Are ViewModels independent of activity/fragment lifecycles or just their configuration changes.
ViewModel (VM) 独立于配置更改,并在销毁 Activity/fragment 时被清除。
下面是lifecycle of 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/