在google示例中指出,要在片段之间进行通信,可以将ViewModel
范围限定为Activity
。这种方法的问题在于,ViewModel
将持续到Activity
被销毁为止。
在单个Activity
应用程序中,这意味着活动将被ViewModel
乱堆,而现在可能不再需要。如果这些ViewModel
不能正确清除,您也会遇到状态问题。
因此,我环顾四周如何更改ViewModel
的生命周期,这样我就不必绑定到Activity
生命周期,而要比Fragment
的生命周期更长。这对于在屏幕流程过程中满足需求的屏幕的多步骤/事务流程将非常有用。
因此,基本上,我希望ViewModel的作用域小于活动范围,但大于片段。
为实现此目的,我创建了自己的ViewModelStore
并将其跨配置持久保存,就像FragmentActivity
持久保存自己的ViewModelStore
一样。然后,当我初始化视图模型时,ViewModelProvider(myCustomViewModelStore, myFactory).get(SomeViewModelClass::class.java)
由于ViewModel
的作用域不是我的自定义ViewModelStore
,因此我可以轻松地调用viewModelStore.clear()
来控制ViewModel
的生命周期。
我想知道这是否是一个好主意,是否有人在使用相同的主意。
提前致谢!
最佳答案
从Navigation Component 2.1.0-aplha02开始,现在可以将ViewModel
的范围限定为通过Navigation Component
导航图的事务流。