在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
的生命周期。
我想知道这是一个好主意,还是有人在使用相同的主意。
谢谢!
答案 0 :(得分:0)
从Navigation Component 2.1.0-aplha02开始,ViewModel
的范围现在可以限制通过Navigation Component
导航图的交易流。