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-
發佈留言