Compose와 수명 주기 통합

Lifecycle 라이브러리는 Jetpack Compose와 통합할 수 있는 내장 API를 제공합니다. 주요 API는 다음과 같습니다.

  • 현재 Lifecycle.State의 흐름
  • LifecycleEffects - 특정 Lifecycle.Event에 기반하여 블록을 실행할 수 있습니다.

이러한 통합은 Compose 계층 구조 내에서 수명 주기를 관리하는 편리한 후크를 제공합니다. 이 문서에서는 앱에서 이를 사용하는 방법을 설명합니다.

흐름을 사용하여 수명 주기 상태 수집

Lifecycle은 현재 Lifecycle.State를 Kotlin StateFlow로 제공하는 currentStateFlow 속성을 노출합니다. 이 FlowState로 수집할 수 있습니다. 이렇게 하면 앱에서 컴포지션 중에 수명 주기의 변경사항을 읽을 수 있습니다.

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()

수명 주기 이벤트에서 코드 실행

특정 Lifecycle.Event가 발생할 때 블록을 실행할 수 있게 하는 LifecycleEffects도 있습니다.

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

LifecycleEventEffect 외에 LifecycleStartEffectLifecycleResumeEffect도 사용할 수 있습니다. 이러한 API는 특정 이벤트에 연결됩니다. 또한 기본 블록 내에 이벤트가 시작되었을 수 있는 모든 코드를 정리하는 데 도움이 되는 추가 블록을 제공합니다.

LifecycleStartEffect

LifecycleStartEffectLifecycleEffect와 유사하지만 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

LifecycleResumeEffectLifecycleStartedEffect와 같은 방식으로 작동하지만, 대신 Lifecycle.Event.ON_RESUME 이벤트에서 실행됩니다. 또한 정리를 실행하는 onPauseOrDispose 블록도 제공합니다.

LifecycleResumeEffect {
  // ON_RESUME code is executed here

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