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