我什么时候应该删除 android 上的实时数据观察器?
When should i remove livedata observer on android?
我正在使用 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:我正在使用 Doug Stevenson tutorial,太棒了!
如果使用observe
方法,LiveData
会在onDestroy状态下自动清零
Observers are bound to Lifecycle objects and clean up after themselves
when their associated lifecycle is destroyed.
可以找到更多信息here
只有使用observeForever
方法才需要手动删除livedata。之所以需要手动删除,是因为在使用observeForever
方法时,没有指定它的生命周期。
我正在使用 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:我正在使用 Doug Stevenson tutorial,太棒了!
如果使用observe
方法,LiveData
会在onDestroy状态下自动清零
Observers are bound to Lifecycle objects and clean up after themselves when their associated lifecycle is destroyed.
可以找到更多信息here
只有使用observeForever
方法才需要手动删除livedata。之所以需要手动删除,是因为在使用observeForever
方法时,没有指定它的生命周期。