在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导航图的事务流。

10-06 11:29