Android - Jetpack - 使延迟创建的 class 生命周期感知
Android - Jetpack - Make lazily created class lifecycle aware
有一个有趣的案例要解决。
背景故事
我有一个 ViewModel
是 LifecycleObserver
,我遵循一个很好的架构模式,在这个模式中这个 VM 服务于整个屏幕逻辑,并在内部组合更小的 VM 来服务组件在屏幕上。
为了让这些较小的 VM 开箱即用,我让它们在容器 ViewModel 的 onCreate
上具有生命周期感知能力。
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
smallerVMs.forEach(owner.lifecycle::addObserver)
}
问题
但是,我还有 n
个其他小型虚拟机,我将根据需要实例化这些虚拟机,具体取决于 API 调用。
因为在它们被实例化之前我没有对它们的引用,所以我无法让它们在 onCreate
上具有生命周期意识,如上所述。
当 API 返回结果时,我将它们实例化,但我没有 LifecycleOwner
实例!
我想在 onCreate
中缓存 LifecyclerOwner
,但这意味着在 VM 中保持对视图的引用,这在 MVVM 中不是一个好的做法。
对此有什么想法吗?
提前致谢!
免责声明:在大型 VM 中包含较小的 VM 是必不可少的,因为较小的 VM 是整个应用程序中可重复使用的表示部分
与其让每个子对象都遵循相同的生命周期所有者,不如委托,因为您正在使用 Composite 模式:
假设你正在使用 LifecycleEventObserver (since LifeCycleObserver 不应直接使用):
override fun onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
smallerVMS.forEach { it.onStateChanged(source, event) }
}
那么 何时 创建子 VM 并不重要 - 只要它们在该列表中,它们就会在父级创建时获得每个回调,就好像他们在观察自己。
有一个有趣的案例要解决。
背景故事
我有一个 ViewModel
是 LifecycleObserver
,我遵循一个很好的架构模式,在这个模式中这个 VM 服务于整个屏幕逻辑,并在内部组合更小的 VM 来服务组件在屏幕上。
为了让这些较小的 VM 开箱即用,我让它们在容器 ViewModel 的 onCreate
上具有生命周期感知能力。
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
smallerVMs.forEach(owner.lifecycle::addObserver)
}
问题
但是,我还有 n
个其他小型虚拟机,我将根据需要实例化这些虚拟机,具体取决于 API 调用。
因为在它们被实例化之前我没有对它们的引用,所以我无法让它们在 onCreate
上具有生命周期意识,如上所述。
当 API 返回结果时,我将它们实例化,但我没有 LifecycleOwner
实例!
我想在 onCreate
中缓存 LifecyclerOwner
,但这意味着在 VM 中保持对视图的引用,这在 MVVM 中不是一个好的做法。
对此有什么想法吗? 提前致谢!
免责声明:在大型 VM 中包含较小的 VM 是必不可少的,因为较小的 VM 是整个应用程序中可重复使用的表示部分
与其让每个子对象都遵循相同的生命周期所有者,不如委托,因为您正在使用 Composite 模式:
假设你正在使用 LifecycleEventObserver (since LifeCycleObserver 不应直接使用):
override fun onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
smallerVMS.forEach { it.onStateChanged(source, event) }
}
那么 何时 创建子 VM 并不重要 - 只要它们在该列表中,它们就会在父级创建时获得每个回调,就好像他们在观察自己。