将同一观察者多次添加到实时数据中



我们的团队正在使用ViewModelLiveData组件来开发当前的应用程序。在单击Button的其中一个场景中,我们正在启动网络 API 调用。

只要 API 结果可用,Repository就会返回一个LiveData

ViewModel中,我们仅在单击Button时附加Observer,并且由于我们处于ViewModel因此我们正在使用observeForever()

这是代码;


//ViewModel Code

//Api Observer
var apiObserver: Observer<ApiState> =
Observer { response ->
when (response.currentState) {
StateConstants.STATE_API_CALLED -> showLoading()
StateConstants.STATE_API_COMPLETE -> stopLoading()
StateConstants.STATE_DATA_LOADED -> processResponseData(response.data)
StateConstants.STATE_API_ERROR -> showError(response.errorMessage)
}
}

fun sendReminderToCustomer() { //This method is called on Button click from XML
repo.apiStateLiveData.observeForever(apiObserver) //attach Observer and Observe Forever
repo.sendReminderDetails() //make api call 
}
override fun onCleared() {
super.onCleared()
repo.apiStateLiveData.removeObserver(apiObserver) //remove Observer
}

由于每次单击按钮时,我们都会将相同的观察器附加到LiveData因此会不会有任何未知的副作用,例如,

  1. 同一个观察者是否会多次添加到LiveData观察者列表中?
  2. 如果多次添加同一个观察者,onChanged()方法也会被多次调用吗?

是的,是的。确保只添加一次观察者(例如,在视图模型的init中(

最新更新