Android 多次调用 LiveData 观察

Android LiveData observe is called multiple times

我有一个 BaseActivity,其中有一个 MutableLiveData 字段,如下所示

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

当调用 BaseActivityonStart 方法时,将进行网络调用以填充此 MutableLiveData 字段。

我还有几个 Fragment 是继承 BaseActivity.

Activity 的一部分

在这些片段中,我正在片段的 onResume 方法中进行另一个调用,如下所示

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

第一次创建片段时 observe 只调用一次,但片段进入后台然后返回,它被调用多次,这会导致问题。

这个问题可能是什么原因,我该如何解决?

如有任何帮助,我们将不胜感激。

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

也许您可以尝试使用另一个生命周期挂钩,因为 onResume() 是最常被调用的入口挂钩。

onCreate() 试试。

那是因为你应该在 onViewCreated 中使用 observe(viewLifecycleOwner, Observer { ...

import androidx.lifecycle.observe

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

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

目前,如果您将应用程序置于后台,然后无限次将其置于前台,您将拥有无限数量的订阅者。