Android LiveData watch被多次调用

时间:2019-06-06 15:19:05

标签: android kotlin android-lifecycle android-architecture-components android-livedata

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

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

调用MutableLiveData的{​​{1}}方法时,将进行网络调用以填充此onStart字段。

我还有几个BaseActivity,它们是继承Fragment的{​​{1}}的一部分。

如果有这些片段,我将在下面的片段的Activity方法中再次调用

BaseActivity

第一次创建该片段onResume时只调用一次,但是该片段进入后台,然后又返回,则被多次调用,这会引起问题。

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

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

那是因为您应该在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) }
    })
}

当前,如果将应用程序置于后台,然后使其无限次出现在前台,则订阅者的数量将是无限的。

答案 1 :(得分:0)

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

也许您可以尝试使用另一个生命周期钩子,因为onResume()在输入钩子中最常被调用。

onCreate()中尝试。