Integra il ciclo di vita con Compose

La libreria del ciclo di vita offre API integrate che consentono l'integrazione con Jetpack Compose. Le API chiave includono le seguenti:

  • Flussi relativi all'attuale Lifecycle.State.
  • LifecycleEffects che ti consente di eseguire un blocco in base a un Lifecycle.Event specifico.

Queste integrazioni offrono pratici hook per gestire i cicli di vita all'interno della gerarchia di Scrivi. Questo documento descrive come utilizzarli nella tua app.

Raccogli lo stato del ciclo di vita con i flussi

Il ciclo di vita espone una proprietà currentStateFlow che fornisce l'elemento Lifecycle.State corrente come StateFlow di Kotlin. Puoi raccogliere questo Flow come State. Ciò consente all'app di leggere le modifiche nel ciclo di vita durante la composizione.

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

L'esempio precedente è accessibile utilizzando il modulo lifecycle-common. Il metodo currentStateAsState() è disponibile nel modulo lifecycle-runtime-compose, che consente di leggere comodamente lo stato del ciclo di vita attuale con una singola riga. Lo dimostra l'esempio seguente:

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

Esegui il codice sugli eventi del ciclo di vita

Esistono anche LifecycleEffects che ti consentono di eseguire un blocco quando si verifica una determinata Lifecycle.Event.

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

Oltre a LifecycleEventEffect, puoi utilizzare anche LifecycleStartEffect e LifecycleResumeEffect. Queste API sono legate a eventi specifici. Offrono anche un blocco aggiuntivo all'interno del blocco principale che consente di ripulire qualsiasi codice che l'evento ha avviato.

Effetto inizio ciclo di vita

LifecycleStartEffect è simile a LifecycleEffect, ma viene eseguito solo per gli eventi Lifecycle.Event.ON_START. Accetta anche chiavi che funzionano come altri tasti di composizione. Quando la chiave viene modificata, attiva di nuovo il blocco.

Quando si verifica un evento Lifecycle.Event.ON_STOP o l'effetto esce dalla composizione, viene eseguito un blocco onStopOrDispose. Ciò consente di ripulire qualsiasi lavoro che faceva parte del blocco iniziale.

LifecycleStartEffect {
  // ON_START code is executed here

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

Effetto ripristino ciclo di vita

LifecycleResumeEffect funziona come l'LifecycleStartedEffect, ma viene eseguito invece sull'evento Lifecycle.Event.ON_RESUME. Fornisce inoltre un blocco onPauseOrDispose che esegue la pulizia.

LifecycleResumeEffect {
  // ON_RESUME code is executed here

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