코딩하는 일용직 노동자

LifecycleEventObserver를 이용한 Activity가 아닌 클래스에 라이프사이클을 연결. 본문

안드로이드

LifecycleEventObserver를 이용한 Activity가 아닌 클래스에 라이프사이클을 연결.

bacass 2024. 3. 5. 16:43
Activity 가 아닌 Class나 ViewModel class 에 Activity의 라이프사이클을 연결해서
onCreate(), onResume(), onPause(), onStop() 등의 상태변화를 감지하고 처리하는 방법을 알아보겠습니다.

이번 예제에서는 ViewModel 에 연결해보겠습니다.

1. app레벨의 gradle에 아래의 라이브러리들을 추가해줍니다.
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.7.0'
implementation 'androidx.activity:activity-compose:1.8.2'
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0'


2. ViewModel 에 LifecycleEventObserver interface 를 추가해줍니다.
그리고 onStateChanged() 를 구현해줍니다.
class MainViewModel: ViewModel(), LifecycleEventObserver {

    override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        if (event == Lifecycle.Event.ON_CREATE) {
            // onCreate() 이벤트 처리
            Log.d("MainViewModel", "Lifecycle.Event.ON_CREATE")
        } else if (event == Lifecycle.Event.ON_RESUME) {
            // onResume() 이벤트 처리
            Log.d("MainViewModel", "Lifecycle.Event.ON_RESUME")
        } else if (event == Lifecycle.Event.ON_PAUSE) {
            // onPause() 이벤트 처리
            Log.d("MainViewModel", "Lifecycle.Event.ON_PAUSE")
        }
    }
}​

 

3. Activity 에서 ViewModel을 생성하고, lifecycle을 연결해줍니다.
val mainViewModel = viewModel()
lifecycle.addObserver(mainViewModel)


로그를 찍어보면 성공적으로 호출되는것을 확인할 수 있습니다.


- 참고
기존에는 @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) 처럼 어노테이션을 붙이면 사용할 수 있었습니다만
지금은 Deprecated 된 상태입니다.