猛禽洛的程式筆記庫

[Android] 為什麼LiveData在postValue後訂閱方observe會掉資料?(有時不觸發)

MVVM架構中常會用到LiveData來把後台的資料反映給UI,因為LiveData他是保證資料的同步性(保證UI顯示的都是最新的資料)所以如果拿來連續傳遞資料(例如Event事件),就有可能因為連續發送而不觸發:

eventLiveData.postValue(ViewModelEvent(EVENT_CONNECT_START))
eventLiveData.postValue(ViewModelEvent(EVENT_CONNECT_ERROR))

例如以上連續傳遞了兩個事件EVENT_CONNECT_START -> EVENT_CONNECT_ERROR

在UI端實際只會收到EVENT_CONNECT_ERROR喔!!

因為LiveData這東西本來就不是拿來做事件控制用的,如果還是要用的話(偷懶),需要改變訂閱方的架構,變成收到某事件後,統一進行全盤的UI更新,或者UI更新所需要的內容,都統一由LiveData來傳遞,才不會造成某些事件沒觸發到,導致UI狀態不正確的問題。

*偏方: 可以用Timer設個10~50ms後發送,騙他更新,也有人直接使用setValue強制他更新,不過要小心生命週期的問題喔!

-END-

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *