LiveData는 LifeCycle내에서 관찰 할 수 있는 데이터 홀더 클래스이다.
Observer, LifecycleOwner와 쌍으로 추가 할 수 있다. Observer에는 래핑 된 데이터의 수정에 대해 알림을 받는다. 단! LifecycleOwner상태가 Lifecycle.State.STARTED or Lifecycle.State.RESUMED 일 때 받을 수 있다. observeForever는 항상 활성 상태로 간주하여 항상 알림을 받을 수 있으며 수동으로 removeObserver로 옵저버를 제거할 수 있다. Livecycle에 추가 된 관찰자는 Lifecycle.State.DESTROYED 상태로 이동되면 옵저버가 즉시 구독이 취소되므로 메모리 누수에 대해 걱정할 필요가 없다는 장점을 가지고 있다. LiveData는 ViewModel의 데이터 필드를 보유하도록 설계되어 있으니 참고하자.
LiveData를 사용 시 장점
UI가 데이터 상태와 일치하는지 확인할 수 있다.
-LiveData는 옵저버 패턴을 따른다. LiveData Observer는 기본 데이터가 변경 될 때 구독자에게 알린다. 구독자는 알림을 받으면 해당 객체의 UI를 업데이트 할 수 있다.
메모리 누수가 없다.
-LiveData는 Lifecycle을 알고 있기 때문에 LifecycleOwner의 상태가 Lifecycle.State.DESTROYED가 되면 자동으로 구독 취소된다.
UI의 상태가 활성상태가 아닐 때 이벤트를 수신하지 않는다.
항상 최신 데이터를 유지
-수명주기가 비활성화 되면 다시 활성화 된 후 최신 데이트를 받는다. 예를들어 백그라운드에 활성 중이던 데이터가 포그라운드로 오면 최신 데이터를 받는다.
화면 회전 시 구성 변경
-디바이스가 회전 시 데이터들이 다시 생성되면 최신 데이터를 즉시 수신한다.
<aside> 💡 LiveData가 Lifecycle을 어떻게 알까?
</aside>
LifecycleOwner는 SAM이며, 이를 Activity 또는 Fragment에서 이를 상속하고 있다.
즉, LiveData의 observe함수를 이용해 onwer와 observer를 등록해 Activity or Fragment의 변수로써 사용한다면 각 화면 별 생명주기에 따라 LiveData는 자신의 임무를 수행한다!
viewModel.message.observe(LifecycleOwner등록, Observer {
/* .. 수행 .. */
})