【发布时间】:2020-09-03 23:09:11
【问题描述】:
我们的团队正在使用ViewModel 和LiveData 组件来开发当前的应用程序。在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 是否会有任何未知的副作用,例如,
- 同一个观察者会被多次添加到
LiveData观察者列表中吗? - 如果多次添加同一个观察者,
onChanged()方法也会被多次调用吗?
【问题讨论】:
-
看看这个话题,也许有帮助stackoverflow.com/questions/59107330/…
-
几乎每次我想在视图模型中“观察到永远”时,结果都是必须重构的坏主意。
标签: android android-livedata observer-pattern android-viewmodel android-mvvm