안드로이드
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 된 상태입니다.
