Android - Jetpack - 使延迟创建的 class 生命周期感知

Android - Jetpack - Make lazily created class lifecycle aware

有一个有趣的案例要解决。

背景故事

我有一个 ViewModelLifecycleObserver,我遵循一个很好的架构模式,在这个模式中这个 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 并不重要 - 只要它们在该列表中,它们就会在父级创建时获得每个回调,就好像他们在观察自己。