了解可组合项何时进入组合并离开、初始化

问题描述 投票:0回答:1

我无法理解可组合项何时重新进入组合、何时离开,以及何时使用 LifecycleEvent 观察者。我假设可组合项在再次到达返回堆栈顶部时重新进入组合(不会重新组合),并且当它不再位于 navBackStack 时(或弹出时),它会离开组合。还是只有当它不再位于 backStack 时(当它被弹出时)才留下组合?

如果可组合项每次到达 navBackStack 顶部时都会重新进入组合,我可能不需要向 Lifecycle Observer 添加观察者并在某些 LifecycleEvent(例如 ON_RESUME 或 ON_CREATE)处初始化我的可组合项。我可以在效果块内的初始重组时使用 LaunchedEffect(Unit) 和初始化代码,因为只要该块到达 navBackStack 的顶部(重新进入组合),就会执行该块。我正在将业务逻辑从片段迁移到可组合项的内部。

如果可组合项只要在第一个组合之后保留在返回堆栈中就不会离开组合,则建议的代码:

DisposableEffect(key1 = lifecycleOwner) {
    val observer = LifecycleEventObserver { _, event ->
        when (event) {
            Lifecycle.Event.ON_RESUME -> {
                profileViewModel.initialize()
            }
            else -> Unit
        }
    }
    lifecycleOwner.lifecycle.addObserver(observer)
    onDispose { lifecycleOwner.lifecycle.removeObserver(observer) }
}

建议的代码,如果组合在不再位于 navBackStack 顶部时离开组合,无论它是否仍在 navBackStack 中:

LaunchedEffect(Unit){profileViewModel.initialize()} 
android android-jetpack-compose android-jetpack android-lifecycle jetpack-compose-navigation
1个回答
0
投票

当可组合项从后台堆栈中弹出时,可组合项会离开组合。

可组合项是:

  • 可组合函数
  • 由可组合函数绘制的一段 UI

成分是:

  • 一个进程绘制由多个可组合项组成的整个 UI
  • 全屏UI

活动生命周期是关于整个屏幕UI的。 可组合生命周期是关于由该可组合函数绘制的UI。
两个生命周期是不同的概念,但非常相似。例如:

  • 当顶部 Activity 被弹出堆栈时,该 Activity 就会被销毁。
  • 当顶部可组合项从堆栈中弹出时,该可组合项将被释放。意思是,可组合性离开了组合。

在Jetpack compose UI Toolkit中,建议我们使用单个Activity。在单个 Activity 中,我们将有一个可组合堆栈。

© www.soinside.com 2019 - 2024. All rights reserved.