多次将同一个观察者添加到 LiveData
Add same Observer multiple times to LiveData
我们的团队在开发当前应用程序时使用了 ViewModel
和 LiveData
组件。在 Button
单击的场景之一中,我们正在启动网络 API 调用。
Repository
returns 一个 LiveData
只要 API 结果可用。
在 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()
方法?
是的,是的。确保仅添加一次观察者(例如,在您的 viewModel 的 init
中)
我们的团队在开发当前应用程序时使用了 ViewModel
和 LiveData
组件。在 Button
单击的场景之一中,我们正在启动网络 API 调用。
Repository
returns 一个 LiveData
只要 API 结果可用。
在 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()
方法?
是的,是的。确保仅添加一次观察者(例如,在您的 viewModel 的 init
中)