Когда я должен удалить livedata observer на Android?

#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 метода вы не указываете его жизненный цикл.