LiveData
데이터의 변경에 대한 이벤트를 받을 수 있는 데이터 홀더 클래스로, 안드로이드의 생명주기를 인식한다.
LifeCycleOwner
액티비티, 프래그먼트의 생명주기를 분리하여 담은 객체로, LiveData
는 LifeCycleOwner
를 설정하여 뷰와 생명주기를 같이 할 수 있게 된다.
ObservableField 와의 차이
LiveData
는 생명주기에 따라 자동으로 구독을 해제했다가 사용될 때 다시 구독하는 반면에, ObservableField
는 removeOnPropertyChangedCallback()
함수를 호출해서 직접 구독을 해제 해야 한다.
LiveData 의 동작
LiveData
에 값을 할당하는 방법은 setValue()
, postValue()
2가지 방식이 존재한다.
setValue()
메인 스레드(UI
) 에서 실행되어 즉시 값이 반영된다.
postValue()
백그라운드 스레드에서 실행되어 메인 스레드에 값을 post
하는 방식으로 동작한다.
postValue()
로 값을 할당한 후에 getValue()
로 값을 읽으려고 하면 변경된 값을 읽지 못할 가능성이 높은데, Handler
를 통해 메인 스레드에 값이 전달되기 전에 getValue()
를 호출하기 때문이다.
따라서 메인 스레드에 값이 반영되기 전에는 postValue()
를 여러 번 호출하더라도 모든 값이 즉시 반영되지 않는다.