Android 多次调用 LiveData 观察
Android LiveData observe is called multiple times
我有一个 BaseActivity
,其中有一个 MutableLiveData
字段,如下所示
val refInfoLiveData: MutableLiveData<RefInfo?> by lazy { MutableLiveData<RefInfo?>() }
当调用 BaseActivity
的 onStart
方法时,将进行网络调用以填充此 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) }
}
}
目前,如果您将应用程序置于后台,然后无限次将其置于前台,您将拥有无限数量的订阅者。
我有一个 BaseActivity
,其中有一个 MutableLiveData
字段,如下所示
val refInfoLiveData: MutableLiveData<RefInfo?> by lazy { MutableLiveData<RefInfo?>() }
当调用 BaseActivity
的 onStart
方法时,将进行网络调用以填充此 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) }
}
}
目前,如果您将应用程序置于后台,然后无限次将其置于前台,您将拥有无限数量的订阅者。