为什么片段的上下文在lifecycleScope中为空

时间:2019-06-02 13:33:54

标签: android kotlin lifecycle coroutine

在片段中使用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的机制。

1 个答案:

答案 0 :(得分:4)

Fragment的lifecycleScope(与生命周期本身相同)并不总是具有上下文,只有在onAttach之后和onDetach之前上下文才可用,如果保留Fragment在onDetach之后仍然存在,则上下文可以为空。

由于您不仅要访问上下文,而且还需要触摸视图,因此应使用viewLifecycleOwner.lifecycleScope,这将允许您在Fragment的View生命周期中启动协程,因此您始终具有上下文,并且会取消onDestroyView