Lifecycle 库提供内置 API,可让您与 Jetpack Compose 集成。主要 API 包括:
- 用于当前
Lifecycle.State
的 Flow。 - 可让您根据特定
Lifecycle.Event
运行代码块的LifecycleEffects
。
这些集成提供了方便的钩子,用于在 Compose 层次结构中管理生命周期。本文档概述了您如何在应用中使用它们。
使用 Flow 收集生命周期状态
Lifecycle 暴露了一个 currentStateFlow
属性,它以 Kotlin StateFlow
的形式提供当前的 Lifecycle.State
。您可以将此 Flow
作为 State
进行收集。这允许您的应用在组合期间读取生命周期中的变化。
val lifecycleOwner = LocalLifecycleOwner.current
val stateFlow = lifecycleOwner.lifecycle.currentStateFlow
…
val currentLifecycleState by stateFlow.collectAsState()
前面的示例可通过 lifecycle-common
模块访问。currentStateAsState()
方法在 lifecycle-runtime-compose
模块中可用,让您可以通过一行代码方便地读取当前生命周期状态。以下示例对此进行了演示:
val lifecycleOwner = LocalLifecycleOwner.current
val currentLifecycleState = lifecycleOwner.lifecycle.currentStateAsState()
在生命周期事件上运行代码
还有一些 LifecycleEffects
,可让您在特定 Lifecycle.Event
发生时运行代码块。
LifecycleEventEffect(Lifecycle.Event.ON_START) {
// do something here
}
除了 LifecycleEventEffect
之外,您还可以使用 LifecycleStartEffect
和 LifecycleResumeEffect
。这些 API 与特定事件绑定。它们还在其主代码块中提供了附加代码块,有助于清理事件可能启动的任何代码。
LifecycleStartEffect
LifecycleStartEffect
与 LifecycleEffect
类似,但它仅在 Lifecycle.Event.ON_START
事件上运行。它还接受像其他 Compose 键一样工作的键。当键更改时,它会触发代码块再次运行。
当发生 Lifecycle.Event.ON_STOP
事件或效果退出组合时,它会执行 onStopOrDispose
代码块。这允许清理作为启动代码块一部分的任何工作。
LifecycleStartEffect {
// ON_START code is executed here
onStopOrDispose {
// do any needed clean up here
}
}
LifecycleResumeEffect
LifecycleResumeEffect
的工作方式与 LifecycleStartedEffect
相同,但它在 Lifecycle.Event.ON_RESUME
事件上执行。它还提供了一个执行清理的 onPauseOrDispose
代码块。
LifecycleResumeEffect {
// ON_RESUME code is executed here
onPauseOrDispose {
// do any needed clean up here
}
}