Integra il ciclo di vita con Compose

La libreria Lifecycle offre API integrate che consentono l'integrazione con Jetpack Scrivi. Le API principali includono:

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

Queste integrazioni forniscono pratici ganci per gestire i cicli di vita Componi la gerarchia. Questo documento illustra 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 i valori attuali Lifecycle.State come StateFlow Kotlin. Puoi raccogliere questo Flow come State. In questo modo l'app può leggere le modifiche nel ciclo di vita durante composizione.

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

L'esempio precedente è accessibile utilizzando il modulo lifecycle-common. La Il metodo currentStateAsState() è disponibile in lifecycle-runtime-compose che ti consente di leggere comodamente lo stato del ciclo di vita corrente con un riga singola. L'esempio seguente dimostra che:

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

Esegui il codice su eventi del ciclo di vita

Esistono anche LifecycleEffects che ti consentono di eseguire un blocco quando un Si verifica il giorno Lifecycle.Event.

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

Oltre all'LifecycleEventEffect, puoi utilizzare anche LifecycleStartEffect e LifecycleResumeEffect. Queste API sono legate per eventi specifici. Offrono inoltre un blocco aggiuntivo all'interno del blocco principale che aiuta a ripulire eventuale codice che l'evento potrebbe aver dato il via.

Effetto Inizio ciclo di vita

LifecycleStartEffect è simile a LifecycleEffect, ma funziona solo per eventi Lifecycle.Event.ON_START. Accetta anche chiavi che funzionano come Scrivi chiavi. Quando la chiave cambia, attiva di nuovo il blocco.

Quando si verifica un evento Lifecycle.Event.ON_STOP o l'effetto esce dalla composizione, esegue 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 ripresa ciclo di vita

Il LifecycleResumeEffect funziona come il LifecycleStartedEffect, ma viene eseguita il Lifecycle.Event.ON_RESUME . Fornisce inoltre un blocco onPauseOrDispose che esegue eseguire la pulizia.

LifecycleResumeEffect {
  // ON_RESUME code is executed here

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