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 elementuLifecycle.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
}
}