2

看起來像MutableLiveData只有通過使setValue()postValue()方法公開,而LiveData不同,而在LiveData它們受保護。爲什麼有一個單獨的MutableLiveData子類的LiveData?

有什麼理由爲這個改變創建一個單獨的類,而不是簡單地將這些方法定義爲LiveData本身的公共方法?

一般來說,是這樣一種繼承形式(增加某些方法的可見性是唯一的改變)一個衆所周知的實踐,以及它可能有用的一些場景(假設我們可以訪問所有的代碼) ?

+1

這是一個設計決定。 'LiveData'是不可變的,因爲客戶端不能改變內部狀態,因此線程安全 – Blackbelt

回答

4

LiveData - Android Developer Documentation,你可以看到,對於LiveDatasetValue() & postValue()方法不是公共的。

然而,在MutableLiveData - Android Developer Documentation,你可以看到,MutableLiveData擴展LiveData內部和也LiveData的兩大神奇的方法是公開在此可用,他們是setValue() & postValue()

setValue():設置值並將值分派給所有活動觀察者,必須從主線程調用。

postValue():將任務發佈到主線程以覆蓋由setValue()設置的值,必須從調用後臺線程

因此,LiveData不可變的MutableLiveDataLiveData這是可變 & 線程安全

相關問題