Выбор ответа Junior Корутины и structured concurrency спрашивают часто обновлено

Чем плох GlobalScope

Вопрос

Почему GlobalScope.launch { } в ViewModel считается ошибкой?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Корутину никто не отменит, она переживёт экран. Корутина в GlobalScope живёт до конца процесса и не участвует в structured concurrency: экран закрыли, а запрос продолжается, тратит ресурсы и может держать ссылки на ViewModel или View.

Варианты ответа

  1. Корутину никто не отменит, она переживёт экранправильный ответ
  2. GlobalScope работает только на главном потоке
  3. В GlobalScope нельзя вызывать suspend-функции
  4. GlobalScope запрещён в Android и не компилируется

Разбор

Корутина в GlobalScope живёт до конца процесса и не участвует в structured concurrency: экран закрыли, а запрос продолжается, тратит ресурсы и может держать ссылки на ViewModel или View. Правильно viewModelScope, который отменяется в onCleared. GlobalScope компилируется (помечен @DelicateCoroutinesApi), работает на Default и допускает suspend-вызовы.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.