Android — MutableLiveData 跟LiveData的關係是…?

JLin
Sep 14, 2021

--

在MVVM中應該都會用上LiveData,然而大多都會建議你在viewModel中宣告這樣,不要讓可被改變的liveData對外可被修改

private val _dataChangeLiveData = MutableLiveData<String>()

你會說那封裝後外面UI該怎麼訂閱他?

所以官方範例會在建議你宣告一個public且不可變的liveData對外

val dataChangeLiveData: LiveData = _dataChangeLiveData

所以放在一起就會變成

private val _dataChangeLiveData = MutableLiveData<String>()
val dataChangeLiveData: LiveData = _dataChangeLiveData

這對就永遠變成一組了,那你有想過,他們的關係是什麼呢?

簡單來猜應該可以知道

MutableLiveData : LiveData

然而實際上你會想說,那mutableLiveData是做了什麼事情才會讓liveData value可以被修改呢?

來看看source Code吧

可以看到他就是這麼簡單而已,覆寫了postValue變成public

這時候來看一下liveData.java的postValue是長什麼樣子

如同想像的,他本身就是一個protect的function,而MutableLiveData他們是同一個packageName,所以自然是可以透過繼承覆寫後去呼叫保護的方法

以上透過這樣的察看,就可以更清楚MutableLiveData與LiveData之間的關係是什麼了。

--

--

JLin
JLin

Written by JLin

台中 / JAVA / Android /Kotlin / Kotlin Native 對於Kotlin衍生的JVM等技術 Compose for web / desktop / Ktor Server,生成式AI (Gemini/OpenAI)各式應用, 都有小興趣

No responses yet