我在片段中使用lifecycleScope时遇到麻烦,我认为如果该片段脱离 Activity ,则lifecycleScope将取消协程作业。
我已经阅读了lifecycleScope的代码,但我认为这不可能发生。
我唯一能做的就是为此添加一个前提条件“iwego”。
private fun updateUserInfo(user: User) = lifecycleScope.launch {
textView.text = getString(R.string.foo)
}
此代码抛出
我希望有人可以帮助我解释lifecycleScope的机制。
最佳答案
Fragment的lifecycleScope(与生命周期本身的方式相同)并不总是具有上下文,只有在onAttach之后和onDetach之前上下文才可用,如果保留Fragment在onDetach之后仍然存在,则上下文可以为null。
因为您不仅可以访问上下文,而且可以访问 View ,所以应该使用viewLifecycleOwner.lifecycleScope
,这将允许您在Fragment的View生命周期中启动协程,因此您始终具有上下文,并且它会取消onDestroyView