LiveData는 관찰 가능한 데이터 홀더 클래스이다, 관찰 가능한 일반 클래스와 달리 LiveData는 수명 주기를 인식한다
Observer 클래스로 표현되는 관찰자의 수명 주기가 STARTED or RESUMED 상태이면 활성 관찰자라고 한다
LiveData는 활성 관찰자에게만 업데이트 정보를 알린다.
업데이트 정보는 LiveData 객체의 값이 변경되었을떄 전달받는 값을 말한다(아마도)
class SimpleObservable : ObservableSource<Int> {
override fun subscribe(observer: Observer<in Int>) {
for (i in 1..10) {
observer.onNext(i)
}
observer.onComplete()
}
}
class UserLiveData : LifecycleObserver {
private val _userName = MutableLiveData<String>()
val userName: LiveData<String>
get() = _userName
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume() {
// 화면이 활성화될 때마다 값 업데이트
setUserName("홍길동")
}
fun setUserName(name: String) {
// 화면이 활성화된 경우에만 값 업데이트
if (Lifecycle.State.RESUMED == lifecycle.currentState) {
_userName.value = name
}
}
}
LifecycleOwner 인터페이스를 구현하는 객체에 대한 라이프사이클 이벤트를 자동으로 감지 하고 @OnLifecycleEvent 어노테이션을 사용하여 수명주기 이벤트를 처리할 수 있다
LiveData는 기본 데이터가 변경될 때 Observer객체에 알린다
Observer객체에 UI를 업데이트를 하면 앱 데이터가 변경될 때마다 관찰자가 대신 UI를 업데이트하여 개발자가 업데이트할 필요가 없다
관찰자는 Lifecycle 객체에 결합되어 있어 수명 주기(DESTROYED)가 끝나면 자동으로 삭제된다.
활동이 백 스택에 있을 때를 포함하여 관찰자의 수명 주기가 비활성 상태(DESTROYED)에 있으면 관찰자는 어떤 LiveData 이벤트도 받지 않는다(비활성 관찰자 상태)
수명 주기가 비활성화되면 다시 활성화될 때 최신 데이터를 수신한다
ex) 백그라운드에 있던 활동은 포그라운드로 돌아온 직후 최신 데이터를 받는다
기기 회전과 같은 구성 변경으로 인해 활동 또는 프래그먼트가 다시 생성되면 사용 가능한 최신 데이 터를 즉시 받게 된다.
null