#android #android-livedata #android-jetpack
#Android #android-livedata #android-jetpack
Вопрос:
Я просматриваю список в firestore с помощью LiveData
. Эти наблюдения зависят от другой аутентификации LiveData
.
Должен ли я удалить старый LiveData
observer перед созданием нового? Что произойдет, если я этого не сделаю?
В настоящее время я удаляю observer, используя следующий код, но я могу значительно упростить его, если мне это не понадобится, поскольку я делаю то же самое по всему своему коду
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 amp;amp; itemAutoLiveDate!!.hasObservers()) {
itemAutoLiveDate!!.removeObservers(this)
}
}
ps: я использую учебник Дуга Стивенсона, который великолепен!
Комментарии:
1. Я думаю, если вы
observeForever()
не возражаете, если вы явно не удалите observer. сама библиотека позаботится об этом за вас.
Ответ №1:
Если вы используете observe
метод, LiveData
он будет автоматически удален в состоянии onDestroy.
Наблюдатели привязаны к объектам жизненного цикла и убирают за собой, когда их связанный жизненный цикл уничтожается.
Более подробную информацию можно найти здесь
Вам нужно удалить livedata вручную, только если вы используете observeForever
метод. Причина, по которой вам нужно удалить его вручную, заключается в том, что при использовании observeForever
метода вы не указываете его жизненный цикл.