如何解决启动后台任务时附加观察者的正确顺序
在片段或活动中,是否有推荐的顺序来设置观察者与启动数据生产者?
例如,假设没有其他人在获取数据或观察,那么:
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
// OPTION A: this seems bullet-proof. Setup the observer first,// then trigger the generation of the data...
// ----------------------------------------------------------
// 1) setup observer
mainViewModel.myResponse.observe(viewLifecycleOwner,{ response -> {...} })
// 2) initiate data fetching
mainViewModel.generateFetchInBackground()
// OPTION B: this is what I sometimes see done. This seems like
// a race condition since the triggering of generation happens
// first,then the observer is established...
// ----------------------------------------------------------
// 1) initiate data fetching
mainViewModel.generateFetchInBackground()
// 2) setup observer
mainViewModel.myResponse.observe(viewLifecycleOwner,{ response -> {...} })
}
解决方法
何时开始提供数据或观察数据并不重要。 LiveData
保证所有值都将在您的观察者become active 时传递给他们。
当您更新 LiveData 对象中存储的值时,只要附加的 LifecycleOwner 处于活动状态,它就会触发所有注册的观察者。 LiveData 允许 UI 控制器观察者订阅更新。当 LiveData 对象持有的数据发生变化时,UI 会自动更新以进行响应。
这就是 LiveData
帮助您分离生产者和观察者的原因。并且 LiveData
上没有竞争条件,因为它在主线程上提供所有数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。