生命周期 (Lifecycle)
与 View 系统(onCreate, onStart...)不同,Composable 函数的生命周期更简单。它主要关注在组合 (Composition) 中的存在状态。
三个阶段
Composable 的生命周期由以下三个阶段定义:
- 进入组合 (Enter the Composition): Composable 首次被调用并添加到 UI 树中。
- 重组 (Recomposition): Composable 因为状态变化而重新执行,UI 树发生更新。
- 退出组合 (Leave the Composition): Composable 不再被调用,从 UI 树中移除。

智能重组
Compose 编译器非常智能,它会跟踪每个 Composable 的输入参数。
- 跳过 (Skipping): 如果所有输入参数与上一次调用时相同(且参数类型是稳定的),Compose 会跳过该函数的执行。
- 并行执行: 重组可能会并行运行。
- 取消: 如果在重组进行时状态再次变化,之前的重组可能会被取消。
监听生命周期事件
虽然 Composable 本身没有 onResume 这种回调,但我们经常需要监听宿主(Activity/Fragment)的生命周期。
使用 LifecycleEventObserver
kotlin
@Composable
fun LifecycleListenerEffect() {
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(lifecycleOwner) {
val observer = LifecycleEventObserver { source, event ->
when (event) {
Lifecycle.Event.ON_RESUME -> { /* ... */ }
Lifecycle.Event.ON_PAUSE -> { /* ... */ }
else -> {}
}
}
lifecycleOwner.lifecycle.addObserver(observer)
onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
}
}
}副作用与生命周期
在 Compose 中,你不应该在函数体中直接执行副作用(如写日志、网络请求),因为函数可能会被频繁重组。
应该使用 副作用 API (Side-effect APIs) 将操作绑定到生命周期的特定阶段:
LaunchedEffect: 当进入组合时启动协程,退出组合时取消。DisposableEffect: 当进入组合时执行,退出组合时执行onDispose清理逻辑。
详细内容请参考 副作用 (Side Effects) 章节。