LiveData對象與Observer對象的區(qū)別以及使用注意事項

一、首先,需要了解LiveData更新數(shù)據(jù)的兩種方式:

1、setValue()方法:只能在主線程調(diào)用。
2、postValue()方法:可以在任何線程中調(diào)用。

??通常,我們使用最多的是postValue方法,因為網(wǎng)絡(luò)請求接口這種耗時操作,一般是在子線程中做的,因此給LiveData對象進行賦值操作也在子線程。


二、LiveData與Observer的區(qū)別:

1、LiveData:當(dāng)每次重新賦值時就會觸發(fā)監(jiān)聽。
2、Observer:當(dāng)數(shù)據(jù)更新時才會觸發(fā)監(jiān)聽。

??換句話說,使用postValue()為LiveData對象進行賦值操作,第一次賦值1,第二次再賦值1,賦值進行了兩次,因此調(diào)用兩次監(jiān)聽。而Observer對象進行同樣的操作,監(jiān)聽事件只會調(diào)用一次。(也就是說LiveData并不關(guān)心你的值是否發(fā)生了改變,只要有賦值就觸發(fā)監(jiān)聽)

另外:LiveData對象跟生命周期進行綁定,當(dāng)頁面不可見時,更新通知將不會發(fā)送,當(dāng)從不可見到可見時,狀態(tài)發(fā)生改變,之前的通知可能會發(fā)送也可能不再發(fā)送,只更新最新的,中間值的改變不會展示通知發(fā)送過程;而Observer對象不與生命周期綁定,通知幾次就發(fā)送幾次。

三、使用LiveData對象和布局產(chǎn)生DataBinding雙向綁定的時候注意事項:

1、需要將LiveData對象進行定義的時候需要定義為String類型。
譬如:MultableLiveData<String>。

分析:?當(dāng)你在布局中使用到Int類型的數(shù)字時,很多人會將其定義為MutableLiveData<Int>類型的變量,因為方便對其進行加減操作,最后通過DataBinding在處理后重新賦值并更新UI。這里就需要使用到DataBinding中的雙向綁定。
??而如果你的字段定義為MutableLiveData<Int>類型,則勢必你需要在布局中這樣寫:拼接字符串。這樣就會發(fā)生問題,因為每次你更新的是MutableLiveData<Int>類型的變量而在布局中卻要將其更新成MutableLiveData<String>類型的,這樣UI會無法進行更新。因此必須將其在一開始就定義為MutableLiveData<String>類型的變量。
??換句話說,使用LiveData對象和DataBinding布局雙向綁定時,不能進行字段拼接,因為需要直接操作綁定在布局中的MutableLiveData<String>字段,用以通知更新UI布局。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容