Lebenszyklus in Compose integrieren

Die Lifecycle-Bibliothek bietet integrierte APIs, mit denen Sie Jetpack einbinden können Schreiben: Zu den wichtigsten APIs gehören:

  • Abläufe für den aktuellen Lifecycle.State.
  • LifecycleEffects, mit dem Sie einen Block basierend auf einem bestimmten Lifecycle.Event.

Diese Integrationen bieten praktische Hooks zur Verwaltung von Lebenszyklen im Erstellen Sie eine Hierarchie. In diesem Dokument wird beschrieben, wie Sie sie in Ihrer App verwenden können.

Lebenszyklusstatus mit Abläufen erfassen

Der Lebenszyklus stellt eine currentStateFlow-Eigenschaft zur Verfügung, die den aktuellen Lifecycle.State als StateFlow für Kotlin. Sie können diese Flow sammeln als State. So kann Ihre App Änderungen im Lebenszyklus während Zusammensetzung.

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 in lifecycle-runtime-compose verfügbar Modul, mit dem Sie den aktuellen Lebenszyklusstatus bequem in einer Zeile. Das folgende Beispiel veranschaulicht dies:

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

Code für Lebenszyklusereignisse ausführen

Mit LifecycleEffects können Sie einen Block ausführen, Lifecycle.Event ist aufgetreten.

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

Zusätzlich zum LifecycleEventEffect können Sie auch Folgendes verwenden: LifecycleStartEffect und LifecycleResumeEffect. Diese APIs sind an zu bestimmten Ereignissen. Außerdem wird eine zusätzliche Blockierung innerhalb des primären Blocks angeboten. das hilft, Code zu bereinigen, der durch die Veranstaltung gestartet worden sein könnte.

Lebenszyklus-Starteffekt

LifecycleStartEffect ähnelt LifecycleEffect, wird aber nur ausgeführt, an Lifecycle.Event.ON_START-Veranstaltungen. Es akzeptiert auch Schlüssel, die wie andere funktionieren Tastatureingabe. Wenn sich der Schlüssel ändert, wird der Block noch einmal ausgeführt.

Wenn ein Lifecycle.Event.ON_STOP-Ereignis auftritt oder der Effekt die Komposition verlässt, wird ein onStopOrDispose-Block ausgeführt. Dies ermöglicht das Bereinigen aller Arbeiten das Teil des Anfangs war.

LifecycleStartEffect {
  // ON_START code is executed here

  onStopOrDispose {
    // do any needed clean up here
  }
}

LifecycleResumeEffect

Der LifecycleResumeEffect funktioniert auf die gleiche Weise wie der LifecycleStartedEffect, wird jedoch auf dem Lifecycle.Event.ON_RESUME ausgeführt . Außerdem stellt er einen onPauseOrDispose-Block zur Verfügung, der den zu bereinigen.

LifecycleResumeEffect {
  // ON_RESUME code is executed here

  onPauseOrDispose {
    // do any needed clean up here
  }
}