將生命週期與 Compose 整合

生命週期程式庫提供內建 API,可讓您與 Jetpack Compose 整合。主要 API 包括以下項目:

  • 目前Lifecycle.State的資料流。
  • LifecycleEffects 可讓您根據特定的 Lifecycle.Event 執行區塊。

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

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

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

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

您可以使用 lifecycle-common 模組存取上述範例。lifecycle-runtime-compose 模組提供 currentStateAsState() 方法,可讓您以單行輕鬆讀取目前的 Lifecycle 狀態。以下範例會示範這個做法:

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

在生命週期事件上執行程式碼

您還可以使用 LifecycleEffects,在特定 Lifecycle.Event 發生時執行區塊。

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

除了 LifecycleEventEffect 之外,您也可以使用 LifecycleStartEffectLifecycleResumeEffect。這些 API 會與特定事件相連結。這些 API 也在主要區塊中提供額外區塊,協助清除可能啟動事件的任何程式碼。

LifecycleStartEffect

LifecycleStartEffectLifecycleEffect 類似,但只會在 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
  }
}