看起來像MutableLiveData
只有通過使setValue()
和postValue()
方法公開,而LiveData
不同,而在LiveData
它們受保護。爲什麼有一個單獨的MutableLiveData子類的LiveData?
有什麼理由爲這個改變創建一個單獨的類,而不是簡單地將這些方法定義爲LiveData
本身的公共方法?
一般來說,是這樣一種繼承形式(增加某些方法的可見性是唯一的改變)一個衆所周知的實踐,以及它可能有用的一些場景(假設我們可以訪問所有的代碼) ?
看起來像MutableLiveData
只有通過使setValue()
和postValue()
方法公開,而LiveData
不同,而在LiveData
它們受保護。爲什麼有一個單獨的MutableLiveData子類的LiveData?
有什麼理由爲這個改變創建一個單獨的類,而不是簡單地將這些方法定義爲LiveData
本身的公共方法?
一般來說,是這樣一種繼承形式(增加某些方法的可見性是唯一的改變)一個衆所周知的實踐,以及它可能有用的一些場景(假設我們可以訪問所有的代碼) ?
在LiveData - Android Developer Documentation,你可以看到,對於LiveData
,setValue()
& postValue()
方法不是公共的。
然而,在MutableLiveData - Android Developer Documentation,你可以看到,MutableLiveData
擴展LiveData
內部和也LiveData
的兩大神奇的方法是公開在此可用,他們是setValue()
& postValue()
。
setValue()
:設置值並將值分派給所有活動觀察者,必須從主線程調用。
postValue()
:將任務發佈到主線程以覆蓋由setValue()
設置的值,必須從調用後臺線程。
因此,LiveData
是不可變的。 MutableLiveData
是LiveData
這是可變 & 線程安全。
這是一個設計決定。 'LiveData'是不可變的,因爲客戶端不能改變內部狀態,因此線程安全 – Blackbelt