我正在使用LiveData
观察Firestore中的列表。此观察结果取决于另一个身份验证LiveData
。
我是否应该在创建新观察者之前删除旧的LiveData
观察器?如果我不这样做会怎样?
目前我正在使用下一个代码删除观察器,但是如果我不需要,我可以大大简化它,因为我在我的代码中都做了同样的事情
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
...
//Authentication observer which is the ItemAuto dependent
viewModel.auth.observe(viewLifecycleOwner, Observer {auth ->
updateUserItemAutoLiveData(auth)
})
}
private fun updateUserItemAutoLiveData(auth: Auth) {
if (!auth.uid.isNullOrEmpty()) {
removeUserItemAutoObservers()
itemAutoLiveDate = viewModel.getUserItemAutoLiveData(auth.uid)
itemAutoLiveDate!!.observe(viewLifecycleOwner, Observer {
if (it != null) {
if (it.data != null) {
itemAutoCompleteAdapter.submitItemAuto(it)
}
}
})
} else {
removeUserItemAutoObservers()
}
}
private fun removeUserItemAutoObservers() {
if (itemAutoLiveDate != null && itemAutoLiveDate!!.hasObservers()) {
itemAutoLiveDate!!.removeObservers(this)
}
}
PS:我正在使用道格史蒂文森教程,这很棒!
如果您使用的是observe
方法,LiveData
将在onDestroy状态下自动清除。
观察者绑定到生命周期对象并自行清理 当其关联的生命周期被销毁时。
更多信息可以在这里找到
仅当您使用observeForever
方法时,才需要手动删除实时数据。之所以需要手动删除它,是因为当您使用该方法时observeForever
您没有指定它的生命周期。