Skip to content

생명 주기

컴포즈 멀티플랫폼(Compose Multiplatform) 컴포넌트의 생명 주기는 Jetpack Compose의 생명 주기 개념에서 채택되었습니다. 생명 주기를 인식하는 컴포넌트는 다른 컴포넌트의 생명 주기 상태 변화에 반응할 수 있으며, 더 잘 정리되고 종종 더 가벼우며 유지보수하기 쉬운 코드를 만드는 데 도움을 줍니다.

컴포즈 멀티플랫폼은 원본 Jetpack Compose 기능을 다른 플랫폼으로 확장하고 공통 코드에서 생명 주기 상태를 관찰하는 데 도움을 주는 공통 LifecycleOwner 구현체를 제공합니다.

멀티플랫폼 Lifecycle 구현을 사용하려면 commonMain 소스 세트에 다음 종속성을 추가하십시오:

kotlin
kotlin {
    // ...
    sourceSets {
        // ...
        commonMain.dependencies {
            // ...
            implementation("org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.9.2")
        }
        // ...
    }
}

멀티플랫폼 생명 주기 구현체의 변경 사항은 새로운 소식에서 확인하거나 컴포즈 멀티플랫폼 변경 로그에서 특정 EAP 릴리스를 추적할 수 있습니다.

상태 및 이벤트

생명 주기 상태 및 이벤트의 흐름(Jetpack 생명 주기와 동일합니다):

Lifecycle diagram

생명 주기 구현

컴포저블은 일반적으로 고유한 생명 주기를 필요로 하지 않습니다. 공통 LifecycleOwner가 모든 상호 연결된 엔티티에 생명 주기를 제공합니다. 기본적으로 컴포즈 멀티플랫폼으로 생성된 모든 컴포저블은 동일한 생명 주기를 공유하며, 해당 이벤트에 구독하고, 생명 주기 상태를 참조하는 등의 작업을 수행할 수 있습니다.

LifecycleOwner 객체는 CompositionLocal로 제공됩니다. 특정 컴포저블 서브트리에 대해 생명 주기를 개별적으로 관리하고 싶다면, 자신만의 LifecycleOwner 구현체를 생성할 수 있습니다.

멀티플랫폼 생명 주기에서 코루틴을 사용할 때, Lifecycle.coroutineScope 값이 Dispatchers.Main.immediate 값에 연결되어 있음을 기억하십시오. 이 값은 기본적으로 데스크톱 타겟에서는 사용하지 못할 수 있습니다. 컴포즈 멀티플랫폼에서 생명 주기 내의 코루틴과 플로우가 올바르게 작동하도록 하려면, 프로젝트에 kotlinx-coroutines-swing 종속성을 추가하십시오. 자세한 내용은 Dispatchers.Main 문서를 참조하십시오.

  • 탐색 및 라우팅에서 탐색 컴포넌트의 생명 주기가 어떻게 작동하는지 알아보십시오.
  • 공통 ViewModel 페이지에서 멀티플랫폼 ViewModel 구현에 대해 자세히 알아보십시오.

Android 생명 주기를 다른 플랫폼에 매핑하기

iOS

네이티브 이벤트 및 알림생명 주기 이벤트생명 주기 상태 변경
viewDidDisappearON_STOPSTARTEDCREATED
viewWillAppearON_STARTCREATEDSTARTED
willResignActiveON_PAUSERESUMEDSTARTED
didBecomeActiveON_RESUMESTARTEDRESUMED
didEnterBackgroundON_STOPSTARTEDCREATED
willEnterForegroundON_STARTCREATEDSTARTED
viewControllerDidLeaveWindowHierarchyON_DESTROYCREATEDDESTROYED

Wasm 타겟의 제약 사항으로 인해, 생명 주기는 다음과 같습니다:

  • 애플리케이션이 항상 페이지에 연결되어 있으므로 CREATED 상태를 건너뜁니다.
  • 웹 페이지는 일반적으로 사용자가 탭을 닫을 때만 종료되므로 DESTROYED 상태에 도달하지 않습니다.
네이티브 이벤트생명 주기 이벤트생명 주기 상태 변경
blurON_PAUSERESUMEDSTARTED
focusON_RESUMESTARTEDRESUMED

데스크톱

Swing 리스너 콜백생명 주기 이벤트생명 주기 상태 변경
windowIconifiedON_STOPSTARTEDCREATED
windowDeiconifiedON_STARTCREATEDSTARTED
windowLostFocusON_PAUSERESUMEDSTARTED
windowGainedFocusON_RESUMESTARTEDRESUMED
disposeON_DESTROYCREATEDDESTROYED