Android LiveData наблюдать называется несколько раз - PullRequest
1 голос
/ 06 июня 2019

У меня есть BaseActivity с полем MutableLiveData, как показано ниже

val refInfoLiveData: MutableLiveData<RefInfo?> by lazy { MutableLiveData<RefInfo?>() }

Сетевой вызов выполняется для заполнения этого поля MutableLiveData, когда onStart метод BaseActivityзвонил.

У меня также есть пара Fragment s, которые являются частями Activity, который наследует BaseActivity.

В одном, если эти фрагменты я делаю другой вызов вonResume метод фрагмента, как показано ниже

    (activity as BaseActivity).refInfoLiveData.observe(this, Observer {
        it?.let { refInfo ->
            adapter?.setRefInfo(refInfo)
        }
    })

Когда фрагмент создается в первый раз, observe вызывается только один раз, но фрагмент переходит в фоновый режим, затем возвращается, он вызывается несколько раз, и этовызывающие проблемы.

В чем может быть причина этой проблемы и как я могу ее решить?

Любая помощь будет признательна.

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Это потому, что вы должны использовать observe(viewLifecycleOwner, Observer { ... внутри onViewCreated.

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    (activity as BaseActivity).refInfoLiveData.observe(viewLifecycleOwner, Observer { refInfo ->
        refInfo?.let { adapter.setRefInfo(it) }
    })
}

В настоящее время у вас будет бесконечное количество подписчиков, если вы поместите приложение в фоновый режим, а затем выведите его на передний план.бесконечное количество раз.

0 голосов
/ 06 июня 2019

https://www.javatpoint.com/android-life-cycle-of-activity

Возможно, вы могли бы попробовать использовать другой жизненный цикл, потому что onResume() вызывается чаще всего из входных хуков.

Попробуйте это в onCreate().

...