【问题标题】:Add same Observer multiple times to LiveData多次将同一个观察者添加到 LiveData
【发布时间】:2020-09-03 23:09:11
【问题描述】:

我们的团队正在使用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() 方法也会被多次调用吗?

【问题讨论】:

标签: android android-livedata observer-pattern android-viewmodel android-mvvm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 2018-06-05
    • 1970-01-01
    相关资源
    最近更新 更多