片段恢复后,观察者停止接收实时数据更新

时间:2020-06-03 18:09:13

标签: android android-fragments android-livedata android-viewmodel

  • 我有一个ViewModel每隔几秒钟刷新一次myLiveData
  • 我有一个MainActivity,其中显示了一个MyFragment,它观察到myLiveData
class MyFragment: Fragment() {
    private val viewModel: MainActivityViewModel by activityViewModels()
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        viewModel.myLiveData.observe(viewLifecycleOwner, Observer {
            //live data updated
        })
    }
    someButton.setOnClickListener {
        startActivity(Intent(this, SecondActivity::class.java))
    }
}

单击按钮后,SecondActivity将启动。 SecondActivity完成后,将恢复MainActivityMyFragment

突然发现myLiveData Observer在其公寓中死亡。我的ViewModel仍在不断更新myLiveData,但是现在Observer尽管仍在注册,但再也不会收到其他更改的通知

  • 我尝试删除,然后重新注册一个名为Observer的方法-不起作用。
  • 我尝试将生命周期所有者从viewLifecycleOwner更改为requireActivity()-不起作用
  • 我尝试将视图模型工厂提供程序从by activityViewModels()更改为by viewModels()-不起作用

Android的死亡生命周期中的某种情况导致我的Observer既保持注册状态,也从不接收通知-使得Observer完全无用-但仅当{{1 }}恢复。

我发现唯一有效的方法是在启动MyFragment之前finish()当前MainActivity。这样可以确保在返回SecondActivity(和MainActivity)时,MyFragment从头开始重新注册。这显然是不理想的。

即使手动删除,也无法重新注册Observer,还有什么可以做的?

0 个答案:

没有答案