將生命週期與 Compose 整合

Lifecycle 程式庫提供內建的 API,可讓您與 Jetpack 整合 Compose。主要 API 包括:

  • 目前 Lifecycle.State 的流程。
  • LifecycleEffects,可讓您根據特定 Lifecycle.Event

這些整合提供便利的掛鉤,方便您管理 Compose 階層。本文件將概述如何在應用程式中使用這些內容。

透過資料流收集生命週期狀態

生命週期公開提供 currentStateFlow 屬性,可提供目前的 Lifecycle.State 為 Kotlin StateFlow。您可以將此Flow收集為 State。這可讓應用程式在執行期間讀取生命週期中的變更 樂曲。

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
  }
}