Наша команда использует компоненты ViewModel
и LiveData
при разработке текущего Приложения. В одном из сценариев при Button
щелчке мы инициируем вызов сетевого API.
Repository
возвращает LiveData
всякий раз, когда доступны результаты API.
В ViewModel
мы присоединяем Observer
только при щелчке по Button
, а поскольку мы находимся в 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
, будут ли какие-либо неизвестные побочные эффекты, например,
- Будет ли один и тот же наблюдатель добавляться в список
LiveData
наблюдателей несколько раз? - Если один и тот же наблюдатель добавлен несколько раз, будет ли метод
onChanged()
вызываться несколько раз?