2

setValue()postValue() 방법을 공개로 설정하는 경우에만 LiveData과 달라 보이지만 LiveData에서는 보호됩니다.LiveData의 별도 MutableLiveData 하위 클래스가있는 이유는 무엇입니까?

이 변경을 위해 별도의 클래스를 만들고 단순히 해당 메서드를 LiveData에 public으로 정의하지 않은 이유는 무엇입니까?

일반적으로 잘 알려진 사례와 유용 할 수있는 시나리오는 무엇입니까? (모든 코드에 대한 액세스 권한이 있다고 가정 할 때) 상속 유형 (특정 방법의 가시성을 높이기위한 변경 사항) ?

+1

디자인 결정입니다. 클라이언트가 내부 상태를 변경할 수 없으므로'LiveData'는 불변입니다. 따라서 스레드로부터 안전합니다. – Blackbelt

답변

4

LiveData - Android Developer Documentation에서는 setValue() & postValue() 방법이 공개되지 않으며, LiveData에 대한 것을 볼 수 있습니다. MutableLiveData - Android Developer Documentation에, 당신이 볼 수있는 반면

, MutableLiveData 내부적으로 LiveData를 확장하고 또한 LiveData의 두 가지 마법 방법은 공개적으로 사용할 수 그리고 그들은 setValue() & postValue()이다.

setValue() : 값을 설정하고 모든 활성 관찰자에게 값을 보내려면 메인 스레드에서 호출해야합니다.

postValue() : setValue() 설정 값을 대체 할 메인 스레드로 작업을 게시는 배경 스레드에서 호출해야합니다.

따라서 LiveData불변입니다. MutableLiveDataLiveData이고, 이는 변경 가능 & 스레드 안전입니다.