Integracja cyklu życia z tworzeniem

Biblioteka cyklu życia ma wbudowane interfejsy API umożliwiające integrację z usługą Jetpack Compose. Do najważniejszych interfejsów API należą:

  • Przepływy dla bieżącego zakresu: Lifecycle.State.
  • LifecycleEffects, który umożliwia uruchomienie blokady na podstawie określonego elementu Lifecycle.Event.

Te integracje zapewniają wygodne punkty zaczepienia do zarządzania cyklami życia w hierarchii tworzenia wiadomości. W tym dokumencie opisano, jak używać ich w swojej aplikacji.

Zbieranie stanu cyklu życia za pomocą przepływów

Cykl życia ujawnia właściwość currentStateFlow, która określa bieżącą Lifecycle.State jako właściwość Kotlin StateFlow. Możesz zebrać te Flow jako State. Dzięki temu aplikacja może odczytywać zmiany w cyklu życia podczas tworzenia kompozycji.

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

Do poprzedniego przykładu można uzyskać dostęp za pomocą modułu lifecycle-common. Metoda currentStateAsState() jest dostępna w module lifecycle-runtime-compose, która pozwala w wygodny sposób odczytywać stan cyklu życia za pomocą jednego wiersza. Oto przykład:

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

Uruchamiaj kod w zdarzeniach cyklu życia

Dostępne są też reguły LifecycleEffects umożliwiające uruchomienie blokady, gdy wystąpi określony Lifecycle.Event.

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

Oprócz LifecycleEventEffect możesz też używać LifecycleStartEffect i LifecycleResumeEffect. Te interfejsy API są powiązane z konkretnymi zdarzeniami. Zapewniają też dodatkową blokadę w obrębie bloku podstawowego, która pomaga wyczyścić kod, zapoczątkowany przez wydarzenie.

Efekt początkowy cyklu życia

LifecycleStartEffect jest podobny do LifecycleEffect, ale działa tylko w przypadku zdarzeń Lifecycle.Event.ON_START. Akceptuje też klucze, które działają tak jak inne klucze tworzenia. Gdy klucz się zmieni, blokada zacznie działać ponownie.

Gdy wystąpi zdarzenie Lifecycle.Event.ON_STOP lub efekt wyjdzie z kompozycji, wykona blok onStopOrDispose. Dzięki temu można wyczyścić całą pracę związaną z początkowym blokiem.

LifecycleStartEffect {
  // ON_START code is executed here

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

Efekt wznawiania cyklu życia

Polecenie LifecycleResumeEffect działa tak samo jak LifecycleStartedEffect, ale zamiast tego działa w zdarzeniu Lifecycle.Event.ON_RESUME. Zawiera też blok onPauseOrDispose, który przeprowadza czyszczenie.

LifecycleResumeEffect {
  // ON_RESUME code is executed here

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