Библиотека Lifecycle предлагает встроенные API, которые позволяют интегрироваться с Jetpack Compose . Ключевые API включают следующее:
- Потоки для текущего
Lifecycle.State
. -
LifecycleEffects
, который позволяет запускать блок на основе определенногоLifecycle.Event
.
Эти интеграции предоставляют удобные возможности для управления жизненными циклами в иерархии Compose. В этом документе описывается, как вы можете использовать их в своем приложении.
Сбор состояния жизненного цикла с помощью потоков
Lifecycle предоставляет свойство currentStateFlow
, которое предоставляет текущий Lifecycle.State
как Kotlin StateFlow
. Вы можете собрать этот Flow
как State
. Это позволяет вашему приложению считывать изменения в жизненном цикле во время композиции.
val lifecycleOwner = LocalLifecycleOwner.current
val stateFlow = lifecycleOwner.lifecycle.currentStateFlow
…
val currentLifecycleState by stateFlow.collectAsState()
Предыдущий пример доступен с помощью модуля lifecycle-common
. Метод currentStateAsState()
доступен в модуле lifecycle-runtime-compose
, который позволяет удобно читать текущее состояние жизненного цикла в одной строке. Следующий пример демонстрирует это:
val lifecycleOwner = LocalLifecycleOwner.current
val currentLifecycleState = lifecycleOwner.lifecycle.currentStateAsState()
Запуск кода по событиям жизненного цикла
Существуют также LifecycleEffects
, которые позволяют запускать блок при возникновении определенного Lifecycle.Event
.
LifecycleEventEffect(Lifecycle.Event.ON_START) {
// do something here
}
В дополнение к LifecycleEventEffect
вы также можете использовать LifecycleStartEffect
и LifecycleResumeEffect
. Эти API привязаны к конкретным событиям. Они также предлагают дополнительный блок внутри своего основного блока, который помогает очистить любой код, который мог быть запущен событием.
Жизненный ЦиклНачалоЭффект
LifecycleStartEffect
аналогичен LifecycleEffect
, но запускается только для событий Lifecycle.Event.ON_START
. Он также принимает ключи, которые работают так же, как и другие клавиши Compose. Когда ключ меняется, блок снова запускается.
Когда происходит событие Lifecycle.Event.ON_STOP
или эффект выходит из композиции, он выполняет блок onStopOrDispose
. Это позволяет очистить любую работу, которая была частью стартового блока.
LifecycleStartEffect {
// ON_START code is executed here
onStopOrDispose {
// do any needed clean up here
}
}
Жизненный ЦиклРезюмеЭффект
LifecycleResumeEffect
работает так же, как LifecycleStartedEffect
, но вместо этого он выполняется в событии Lifecycle.Event.ON_RESUME
. Он также предоставляет блок onPauseOrDispose
, который выполняет очистку.
LifecycleResumeEffect {
// ON_RESUME code is executed here
onPauseOrDispose {
// do any needed clean up here
}
}