Выбор ответа Junior Корутины и structured concurrency спрашивают часто обновлено
Чем плох GlobalScope
Вопрос
Почему GlobalScope.launch { } в ViewModel считается ошибкой?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Корутину никто не отменит, она переживёт экран. Корутина в GlobalScope живёт до конца процесса и не участвует в structured concurrency: экран закрыли, а запрос продолжается, тратит ресурсы и может держать ссылки на ViewModel или View.
Варианты ответа
- Корутину никто не отменит, она переживёт экранправильный ответ
GlobalScopeработает только на главном потоке- В
GlobalScopeнельзя вызывать suspend-функции GlobalScopeзапрещён в Android и не компилируется
Разбор
Корутина в GlobalScope живёт до конца процесса и не участвует в structured concurrency: экран закрыли, а запрос продолжается, тратит ресурсы и может держать ссылки на ViewModel или View. Правильно viewModelScope, который отменяется в onCleared. GlobalScope компилируется (помечен @DelicateCoroutinesApi), работает на Default и допускает suspend-вызовы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Корутины и structured concurrency»
- Последовательно или параллельно
- Проглоченный CancellationException
- Во что компилируется suspend-функция
- Почему цикл не отменяется
- Dispatchers.IO и Dispatchers.Default
- Диспетчеры корутин
- Очистка после отмены
- Порядок событий при ошибке в дочерней корутине