将 Lifecycle 与 Compose 集成

Lifecycle 库提供的内置 API 可让您与 Jetpack 集成 写邮件。关键 API 包括:

  • 当前 Lifecycle.State 的流。
  • LifecycleEffects,可让您根据特定的 Lifecycle.Event

这些集成提供了便捷的钩子来管理 Compose 层次结构。本文档简要介绍了如何在应用中使用它们。

使用数据流收集生命周期状态

Lifecycle 公开了 currentStateFlow 属性,用于提供当前的 以 Kotlin StateFlow 的形式使用 Lifecycle.State。您可以通过以下账号收集此FlowState。这样,您的应用就可以读取生命周期中的更改 组合。

val lifecycleOwner = LocalLifecycleOwner.current
val stateFlow = lifecycleOwner.lifecycle.currentStateFlow
…
val currentLifecycleState by stateFlow.collectAsState()

可使用 lifecycle-common 模块访问上述示例。通过 lifecycle-runtime-compose 中提供了 currentStateAsState() 方法 模块,可让您方便地使用 单行。以下示例对此进行了演示:

val lifecycleOwner = LocalLifecycleOwner.current
val currentLifecycleState = lifecycleOwner.lifecycle.currentStateAsState()

针对生命周期事件运行代码

此外,还有 LifecycleEffects 可以让您在特定事件 发生了 Lifecycle.Event

LifecycleEventEffect(Lifecycle.Event.ON_START) {
  // do something here
}

除了 LifecycleEventEffect 之外,您还可以使用 LifecycleStartEffectLifecycleResumeEffect。这些 API 特定事件此外,他们还在其主要屏蔽规则中额外设置了一项屏蔽规则 以帮助清理事件可能已启动的任何代码

LifecycleStartEffect

LifecycleStartEffectLifecycleEffect 类似,但只运行 关于 Lifecycle.Event.ON_START 个事件。它还接受与其他密钥的工作原理 撰写键。当键发生变化时,会触发该代码块再次运行。

当出现 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
  }
}