Почему контекст фрагмента нулевой внутри lifecycleScope - PullRequest
1 голос
/ 02 июня 2019

У меня проблемы при использовании lifecycleScope внутри фрагмента, я думаю, что если фрагмент отключен от действия, то lifecycleScope отменит задания сопрограмм.

Я прочитал код lifecycleScope и думаю, что этого не произойдет. Единственное, что я могу сделать, это добавить предварительное условие «isAdded» для решения этой проблемы.

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 Ответ

4 голосов
/ 26 июня 2019

lifecycleScope (так же, как и сам жизненный цикл) фрагмента не всегда имеет контекст, контекст доступен только после onAttach и до onDetach, в случае сохранения Fragment остается живым после onDetach, поэтому контекст может быть нулевым.

Поскольку вы не только обращаетесь к контексту, но и касаетесь вида, вы должны использовать viewLifecycleOwner.lifecycleScope, это позволит вам запустить сопрограмму в жизненном цикле просмотра фрагмента, поэтому у вас всегда будет контекст, и он отменяет onDestroyView

...