多次将同一个观察者添加到 LiveData

Add same Observer multiple times to LiveData

我们的团队在开发当前应用程序时使用了 ViewModelLiveData 组件。在 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 是否会有任何未知的副作用,例如

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

是的,是的。确保仅添加一次观察者(例如,在您的 viewModel 的 init 中)