android - 创建我自己的 ViewModelStore 来控制 ViewModel 生命周期

标签 android android-architecture-components android-viewmodel

在 google 示例中指出,要在 fragment 之间进行通信,您可以使用作用域为 ActivityViewModel。这种方法的问题在于,ViewModel 将持续到 Activity 被销毁。

在单个 Activity 应用程序中,这意味着 Activity 将散布着可能不再需要的 ViewModel。如果这些 ViewModel 没有被正确清除,您也会遇到状态问题。

所以我看看如何改变 ViewModel 的生命周期,这样我就不必绑定(bind)到 Activity 生命周期,而是比生命周期更长 fragment 。这对于在屏幕流过程中满足要求的多步/事务性屏幕流非常有用。

所以基本上,我希望 ViewModel 的范围小于 Activity 但大于 fragment 。

为了实现这一点,我创建了自己的 ViewModelStore 并在整个配置中持久化它,就像 FragmentActivity 持久化它自己的 ViewModelStore 一样。然后在初始化我将使用的 View 模型时,

ViewModelProvider(myCustomViewModelStore, myFactory).get(SomeViewModelClass::class.java)

由于 ViewModel 不在我的自定义 ViewModelStore 范围内,我可以轻松调用 viewModelStore.clear() 来控制 View 模型

我想知道这是否是个好主意,是否有人在使用相同的想法。

提前致谢!

最佳答案

截至Navigation Component 2.1.0-aplha02 , ViewModel 现在可以通过 Navigation Component 导航图限定事务流。

关于android - 创建我自己的 ViewModelStore 来控制 ViewModel 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54937263/

相关文章:

android - 将 API 请求限制为仅我自己的移动应用程序

android - 在 Android 5.0+ Lollipop 中从 DatePicker 隐藏日、月或年

android - 使用新的 MotionLayout 模仿 Snackbar + CoordinatorLayout + FAB

android - Dagger2 注入(inject)没有 @Inject 构造函数的 ViewModel

java - 如何在 Android Studio 中导入 java.awt.image.BufferedImage

安卓。 Firebase : Keystore file does not exist: ~/. android/debug.keystore

android - 如何清除/删除页面列表适配器中的所有项目

android - 导航库充气器为数据类抛出 ClassNotFoundException

android-viewmodel - 科因 : how inject a sharedViewModel in WorkManager?

android - 从 LiveData(房间数据库)填充微调器