Die Lifecycle-Bibliothek bietet integrierte APIs, die eine Einbindung in Jetpack Compose ermöglichen. Zu den Schlüssel-APIs gehören:
- Abläufe für den aktuellen
Lifecycle.State
. LifecycleEffects
zum Ausführen eines Blocks auf Basis einer bestimmtenLifecycle.Event
.
Diese Integrationen bieten praktische Hooks für die Verwaltung von Lebenszyklen in der Composer-Hierarchie. In diesem Dokument wird beschrieben, wie Sie diese in Ihrer App verwenden können.
Lebenszyklusstatus mit Abläufen erfassen
Der Lebenszyklus stellt ein currentStateFlow
-Attribut bereit, das den aktuellen Lifecycle.State
als Kotlin-StateFlow
bereitstellt. Sie können diese Flow
als State
erfassen. So kann Ihre Anwendung Änderungen im Lebenszyklus während der Zusammensetzung lesen.
val lifecycleOwner = LocalLifecycleOwner.current
val stateFlow = lifecycleOwner.lifecycle.currentStateFlow
…
val currentLifecycleState by stateFlow.collectAsState()
Auf das vorherige Beispiel kann über das Modul lifecycle-common
zugegriffen werden. Die Methode currentStateAsState()
ist im Modul lifecycle-runtime-compose
verfügbar, mit dem Sie den aktuellen Lebenszyklusstatus bequem mit einer einzigen Zeile lesen können. Das folgende Beispiel veranschaulicht dies:
val lifecycleOwner = LocalLifecycleOwner.current
val currentLifecycleState = lifecycleOwner.lifecycle.currentStateAsState()
Code für Lebenszyklusereignisse ausführen
Außerdem gibt es LifecycleEffects
, mit denen Sie einen Block ausführen können, wenn eine bestimmte Lifecycle.Event
auftritt.
LifecycleEventEffect(Lifecycle.Event.ON_START) {
// do something here
}
Zusätzlich zu LifecycleEventEffect
können Sie auch LifecycleStartEffect
und LifecycleResumeEffect
verwenden. Diese APIs sind an bestimmte Ereignisse gebunden. Sie bieten auch einen zusätzlichen Block innerhalb ihres primären Blocks an, mit dem Code, der möglicherweise durch das Ereignis ausgelöst wurde, bereinigt werden kann.
LifecycleStartEffect
Der LifecycleStartEffect
ähnelt dem LifecycleEffect
, wird jedoch nur für Lifecycle.Event.ON_START
-Ereignisse ausgeführt. Außerdem werden Schlüssel akzeptiert, die wie andere Schlüssel zum Schreiben funktionieren. Wenn sich der Schlüssel ändert, löst er die erneute Ausführung der Blockierung aus.
Wenn ein Lifecycle.Event.ON_STOP
-Ereignis vorliegt oder der Effekt die Zusammensetzung beendet, wird ein onStopOrDispose
-Block ausgeführt. So können Sie alle Arbeiten bereinigen,
die Teil des Startblocks waren.
LifecycleStartEffect {
// ON_START code is executed here
onStopOrDispose {
// do any needed clean up here
}
}
LifecycleResumeEffect
LifecycleResumeEffect
funktioniert auf die gleiche Weise wie LifecycleStartedEffect
, wird jedoch stattdessen für das Ereignis Lifecycle.Event.ON_RESUME
ausgeführt. Außerdem ist ein onPauseOrDispose
-Block verfügbar, der die Bereinigung durchführt.
LifecycleResumeEffect {
// ON_RESUME code is executed here
onPauseOrDispose {
// do any needed clean up here
}
}