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

时间:2019-03-01 02:49:39

标签: android android-architecture-components android-viewmodel

在Google示例中已说明,要在各个片段之间进行通信,可以使用范围为ViewModel的{​​{1}}。这种方法的问题在于,Activity会持续到ViewModel被销毁为止。

在一个单独的Activity应用程序中,这意味着该活动将被Activity乱扔,这可能不再需要了。如果无法正确清除这些ViewModel,您还会遇到状态问题。

因此,我环顾四周如何更改ViewModel的生命周期,这样我就不必绑定到ViewModel生命周期,而要比{{1} }。然后,这对于在屏幕流程过程中满足需求的屏幕的多步骤/事务流程非常有用。

所以基本上,我希望ViewModel的作用域小于活动范围,但大于片段。

要完成此任务,我创建了自己的Activity,并以Fragment持久保存自己的ViewModelStore的方式在整个配置中持久保存。然后,在初始化视图模型时,我将使用

FragmentActivity

由于ViewModelStore的范围不属于我的自定义ViewModelProvider(myCustomViewModelStore, myFactory).get(SomeViewModelClass::class.java),因此我可以轻松地调用ViewModel来控制ViewModelStore的生命周期。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

Navigation Component 2.1.0-aplha02开始,ViewModel的范围现在可以限制通过Navigation Component导航图的交易流。