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

Creating my own ViewModelStore to control ViewModel lifecycle

google 示例中指出,要在片段之间进行通信,您可以使用范围限定为 ActivityViewModel。这种方法的问题是,ViewModel 将持续到 Activity 被销毁。

在单个 Activity 应用程序中,这意味着 activity 将散落着可能不再需要的 ViewModel。如果这些 ViewModels 没有被正确清除,你也会遇到状态问题。

所以我看看如何改变 ViewModel 的生命周期,这样我就不必受 Activity 生命周期的束缚,而是比 Fragment。这对于在屏幕流过程中满足要求的屏幕的多步/交易流非常有用。

所以基本上,我希望 ViewModel 的范围小于 activity 但比片段长。

为了实现这一点,我创建了自己的 ViewModelStore 并在整个配置中持久化它,就像 FragmentActivity 持久化它自己的 ViewModelStore 一样。然后在初始化我将使用的视图模型时,

ViewModelProvider(myCustomViewModelStore, myFactory).get(SomeViewModelClass::class.java)

由于 ViewModel 不在我的自定义 ViewModelStore 范围内,我可以轻松调用 viewModelStore.clear() 来控制 ViewModel.

的生命周期

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

提前致谢!

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