将 Lifecycle 与 Compose 集成

Lifecycle 库提供内置 API,可让您与 Jetpack Compose 集成。主要 API 包括以下内容

  • 当前 Lifecycle.State 的 Flow。
  • LifecycleEffects 允许您根据特定的 Lifecycle.Event 运行代码块。

这些集成提供了方便的挂钩来管理 Compose 层次结构中的生命周期。本文档概述了如何在您的应用中使用它们。

使用 Flow 收集生命周期状态

Lifecycle 公开了 currentStateFlow 属性,该属性提供当前 Lifecycle.State 作为 Kotlin StateFlow。您可以将此 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 之外,您还可以使用 LifecycleStartEffectLifecycleResumeEffect。这些 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
  }
}