生命週期程式庫提供內建 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
之外,您也可以使用 LifecycleStartEffect
和 LifecycleResumeEffect
。這些 API 會與特定事件相連結。這些 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
}
}