본문 바로가기

Android/Jetpack Compose

[Jetpack Compose] Activity Lifecycle에 맞게 기능 구현

반응형

Jetpack Compose를 스터디하면서 state에 따라 화면이 자동으로 갱신된다는 점을 정리했다. 이제는 기존 Activity의 생명주기에 따라 동작하는 기능을 Jetpack Compose에서 어떻게 구현할 수 있는지에 대해 정리해보려 한다. 기존의 onCreate, onStart, onResume 등의 메서드를 직접 override 하는 방식과는 조금 다른 Compose만의 접근 방식이 있어서 익혀두면 유용하다.

1. Lifecycle의 중요성.

앱을 만들다 보면 화면에 진입할 때 데이터를 로딩하거나, 백그라운드로 나가면 특정 리소스 해제가 필요하다. 이런 동작은 Activity의 생명주기에 맞춰 처리해야 앱이 안정적이고 성능도 좋아지기 때문에 Activity Lifecycle을 중요하다.

2. Jetpack Compose에서 Lifecycle을 다루는 방법

Jetpack Compose에서는 LifecycleOwner와 LifecycleEventObserver를 활용하거나, LaunchedEffect와 DisposableEffect 같은 Compose Side-effect APIs를 사용해서 lifecycle을 다룰 수 있다.

 

방법 1) LifecycleEventObserver 사용하기

@Composable
fun MyComposable() {
    val lifecycleOwner = LocalLifecycleOwner.current

    DisposableEffect(lifecycleOwner) {
        val observer = LifecycleEventObserver { _, event ->
            when (event) {
                Lifecycle.Event.ON_START -> {
                    // 화면이 시작될 때 실행할 코드
                }
                Lifecycle.Event.ON_STOP -> {
                    // 화면이 종료될 때 실행할 코드
                }
                else -> {}
            }
        }

        lifecycleOwner.lifecycle.addObserver(observer)

        onDispose {
            lifecycleOwner.lifecycle.removeObserver(observer)
        }
    }
}

 

방법 2) Side-effect APIs 사용하기

  • LaunchedEffect: Composable이 처음 composition 될 때 실행
  • DisposableEffect: Lifecycle의 진입/종료 시점을 감지할 때 유용
@Composable
fun MyScreen() {
    LaunchedEffect(Unit) {
        // 화면이 보여질 때 실행 (composition 시점)
    }

    DisposableEffect(Unit) {
        onDispose {
            // 화면이 제거될 때 실행
        }
    }
}

3. Lifecycle 이벤트 정리

Lifecycle 이벤트 설명 Compose에서의 활용 예시
ON_CREATE 액티비티가 처음 생성될 때 LaunchedEffect(Unit)로 초기 로딩
ON_START 화면이 사용자에게 보이기 시작할 때 네트워크 요청, 애니메이션 시작 등
ON_RESUME 사용자와 상호작용 가능한 상태 센서, 위치 정보 수신 시작 등
ON_PAUSE 다른 액티비티에 의해 가려질 때 센서, 위치 수신 중단
ON_STOP 화면이 완전히 보이지 않을 때 리소스 해제, 상태 저장
ON_DESTROY 액티비티가 종료될 때 Observer 제거, 정리 작업 수행

 

4. 마무리

Jetpack Compose는 선언형 UI 방식이라 기존 명령형 UI와는 많이 다르지만, 그렇다고 해서 lifecycle 관련 기능을 구현하지 못하는 건 아니다. LifecycleEventObserver나 Effect API 같은 Compose에 맞는 도구들을 잘 활용하면, 생명주기에 따라 동작하는 기능도 충분히 유연하게 만들 수 있다. 기존 방식과 다른 점들을 Compose 방식에 맞게 잘 정리해두면, 더 깔끔하고 안정적인 앱을 만들 수 있을 것 같다.

반응형

'Android > Jetpack Compose' 카테고리의 다른 글

[Jetpack Compose] 기존 UI방식과 다른 점?  (0) 2025.04.20