我有一个BaseActivity
,其中有一个MutableLiveData
字段,如下所示
val refInfoLiveData: MutableLiveData<RefInfo?> by lazy { MutableLiveData<RefInfo?>() }
调用MutableLiveData
的{{1}}方法时,将进行网络调用以填充此onStart
字段。
我还有几个BaseActivity
,它们是继承Fragment
的{{1}}的一部分。
如果有这些片段,我将在下面的片段的Activity
方法中再次调用
BaseActivity
第一次创建该片段onResume
时只调用一次,但是该片段进入后台,然后又返回,则被多次调用,这会引起问题。
这个问题可能是什么原因,我该如何解决?
任何帮助将不胜感激。
答案 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()
中尝试。