Интегрируйте жизненный цикл с Compose

Библиотека 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
  }
}