创建我自己的 ViewModelStore 来控制 ViewModel 生命周期
Creating my own ViewModelStore to control ViewModel lifecycle
google 示例中指出,要在片段之间进行通信,您可以使用范围限定为 Activity
的 ViewModel
。这种方法的问题是,ViewModel
将持续到 Activity
被销毁。
在单个 Activity
应用程序中,这意味着 activity 将散落着可能不再需要的 ViewModel
。如果这些 ViewModel
s 没有被正确清除,你也会遇到状态问题。
所以我看看如何改变 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
导航图限定交易流。
google 示例中指出,要在片段之间进行通信,您可以使用范围限定为 Activity
的 ViewModel
。这种方法的问题是,ViewModel
将持续到 Activity
被销毁。
在单个 Activity
应用程序中,这意味着 activity 将散落着可能不再需要的 ViewModel
。如果这些 ViewModel
s 没有被正确清除,你也会遇到状态问题。
所以我看看如何改变 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
导航图限定交易流。