Intégrer Lifecycle à Compose

La bibliothèque Lifecycle propose des API intégrées qui vous permettent d'intégrer Jetpack Compose. Voici les API principales :

  • Flux pour le Lifecycle.State actuel.
  • LifecycleEffects qui vous permet d'exécuter un bloc en fonction d'un Lifecycle.Event spécifique.

Ces intégrations fournissent des hooks pratiques pour gérer les cycles de vie dans la hiérarchie de Compose. Ce document explique comment les utiliser dans votre application.

Collecter l'état du cycle de vie avec des flux

Lifecycle expose une propriété currentStateFlow qui fournit le Lifecycle.State actuel sous la forme d'un StateFlow Kotlin. Vous pouvez collecter ce Flow en tant que State. Cela permet à votre application de lire les modifications apportées au cycle de vie pendant la composition.

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

L'exemple précédent est accessible à l'aide du module lifecycle-common. La méthode currentStateAsState() est disponible dans le module lifecycle-runtime-compose, qui vous permet de lire facilement l'état actuel du cycle de vie sur une seule ligne. En voici un bon exemple :

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

Exécuter du code sur des événements de cycle de vie

Il existe également des LifecycleEffects qui vous permettent d'exécuter un bloc lorsqu'un Lifecycle.Event spécifique se produit.

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

En plus de LifecycleEventEffect, vous pouvez également utiliser LifecycleStartEffect et LifecycleResumeEffect. Ces API sont liées à des événements spécifiques. Elles proposent également un bloc supplémentaire dans leur bloc principal qui permet de nettoyer tout code que l'événement peut avoir lancé.

LifecycleStartEffect

LifecycleStartEffect est semblable à LifecycleEffect, mais ne s'exécute que pour les événements Lifecycle.Event.ON_START. Les clés qui fonctionnent comme les autres clés Compose sont également acceptées. Un changement de clé déclenche une nouvelle exécution du bloc.

Lorsqu'un événement Lifecycle.Event.ON_STOP se produit ou que l'effet quitte la composition, un bloc onStopOrDispose est exécuté. Cela permet de nettoyer toute tâche qui faisait partie du bloc de départ.

LifecycleStartEffect {
  // ON_START code is executed here

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

LifecycleResumeEffect

LifecycleResumeEffect fonctionne de la même manière que LifecycleStartedEffect, mais s'exécute sur l'événement Lifecycle.Event.ON_RESUME. Il fournit également un bloc onPauseOrDispose qui effectue le nettoyage.

LifecycleResumeEffect {
  // ON_RESUME code is executed here

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