본문 바로가기

Android

viewmodel 에서 lifecycle 관리

기존에 단순한 생각에 ILifeCycle 을 만들고 이를 기준으로 onPause, onResume, onDestroy 를 ViewModel 에 전달을 했었는데

생각해보니 Android 에 Lifecycle 관련 하여 추가 됨을 인지하곤 소스를 봤는데

AppCompatActivity -> FragmentActivity -> ComponentActivity -> Activity 로 들어가자 LifecycleOwner 이 존재함을 확인 했다.
일단 이를 이용하려면 미리 등록되어 있던 LifecycleRegistry 에 LifecycleObserver 를 추가해서 사용해야 하는데 2가지 선택권이 있었다.

하나는 viewmodel 에 인자로 추가하는 방법 그리고 인터페이스를 상속하는 방법
이중에 후자를 선택했고 viewmodel 에 아래와 같이 추가해서 사용하면 viewmodel 에서 lifecycle 을 알 수 있게 된다.

class YourViewModel: LifecycleEventObserver {
    override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
}

class SomeActivity {
    override fun onCreate(savedInstanceState: Bundle?) {
        // ...
        lifecycle.addObserver(mYourViewModel)
    }
}

여담이지만 구조적으로는 인자에 LifecycleEventObserver 를 추가하는게 나아 보이긴 하지만
lifecycle.addObserver(mYourViewModel) 코드를 BaseFragment 나 BaseActivity 에서 LifecycleEventObserver 를 상속받은 viewmodel 일 경우 
알아서 설정해주기 위해 이 방식을 선택 했다.