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
完成后,将恢复MainActivity
和MyFragment
。
突然发现myLiveData
Observer
在其公寓中死亡。我的ViewModel
仍在不断更新myLiveData
,但是现在Observer
尽管仍在注册,但再也不会收到其他更改的通知。
Observer
的方法-不起作用。viewLifecycleOwner
更改为requireActivity()
-不起作用by activityViewModels()
更改为by viewModels()
-不起作用 Android的死亡生命周期中的某种情况导致我的Observer
既保持注册状态,也从不接收通知-使得Observer
完全无用-但仅当{{1 }}恢复。
我发现唯一有效的方法是在启动MyFragment
之前finish()
当前MainActivity
。这样可以确保在返回SecondActivity
(和MainActivity
)时,MyFragment
从头开始重新注册。这显然是不理想的。
即使手动删除,也无法重新注册Observer
,还有什么可以做的?