【发布时间】:2019-07-23 01:14:09
【问题描述】:
在 google 示例中说明,要从片段到片段进行通信,您可以使用作用域为 Activity 的ViewModel。这种方法的问题在于,ViewModel 将持续到Activity 被销毁。
在单个Activity 应用程序中,这意味着该活动将充满ViewModels,这可能不再需要。如果这些ViewModels 不能被正确清除,你也会遇到状态问题。
所以我看看如何改变ViewModel 的生命周期,这样我就不必被绑定到Activity 的生命周期,而是比Fragment 的生命周期更长。这对于在屏幕流程过程中填充需求的屏幕的多步骤/事务流非常有用。
所以基本上,我希望 ViewModel 的范围小于活动,但大于片段。
为了实现这一点,我创建了自己的ViewModelStore,并以与FragmentActivity 相同的方式在配置中持久化它自己的ViewModelStore。然后在初始化我将使用的视图模型时,
ViewModelProvider(myCustomViewModelStore, myFactory).get(SomeViewModelClass::class.java)
由于ViewModel 不属于我的自定义ViewModelStore,我可以轻松调用viewModelStore.clear() 来控制ViewModel 的生命周期。
我想知道这是否是个好主意,以及是否有人正在使用相同的主意。
提前致谢!
【问题讨论】:
标签: android android-architecture-components android-viewmodel