[android] LiveData

황주완·2023년 4월 13일
0

LiveData 뭐하는 놈일까?

LiveData는 관찰 가능한 데이터 홀더 클래스이다, 관찰 가능한 일반 클래스와 달리 LiveData는 수명 주기를 인식한다
Observer 클래스로 표현되는 관찰자의 수명 주기가 STARTED or RESUMED 상태이면 활성 관찰자라고 한다
LiveData는 활성 관찰자에게만 업데이트 정보를 알린다.

업데이트 정보는 LiveData 객체의 값이 변경되었을떄 전달받는 값을 말한다(아마도)

관찰 가능한(Observable) 일반 클래스

class SimpleObservable : ObservableSource<Int> {
    override fun subscribe(observer: Observer<in Int>) {
        for (i in 1..10) {
            observer.onNext(i)
        }
        observer.onComplete()
    }
}

수명 주기를 인식하는 LiveData

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를 사용하는 이유를 알아보자

UI와 데이터 상태의 일치 보장

LiveData는 기본 데이터가 변경될 때 Observer객체에 알린다
Observer객체에 UI를 업데이트를 하면 앱 데이터가 변경될 때마다 관찰자가 대신 UI를 업데이트하여 개발자가 업데이트할 필요가 없다

메모리 누수 없음


관찰자는 Lifecycle 객체에 결합되어 있어 수명 주기(DESTROYED)가 끝나면 자동으로 삭제된다.

중지된 활동으로 인한 비정상 종료 없음

활동이 백 스택에 있을 때를 포함하여 관찰자의 수명 주기가 비활성 상태(DESTROYED)에 있으면 관찰자는 어떤 LiveData 이벤트도 받지 않는다(비활성 관찰자 상태)

최신 데이터 유지

수명 주기가 비활성화되면 다시 활성화될 때 최신 데이터를 수신한다
ex) 백그라운드에 있던 활동은 포그라운드로 돌아온 직후 최신 데이터를 받는다

적절한 구성 변경

기기 회전과 같은 구성 변경으로 인해 활동 또는 프래그먼트가 다시 생성되면 사용 가능한 최신 데이 터를 즉시 받게 된다.

리소스 공유

null

profile
Hello New World

0개의 댓글