Lebenszyklus in Compose integrieren

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 bestimmten Lifecycle.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
  }
}