Проверяет знание контекстов и диспетчеров для управления исполнением корутин.
CoroutineScope определяет жизненный цикл корутин, например GlobalScope, viewModelScope, lifecycleScope, а Dispatcher указывает, на каком потоке выполнять код: Dispatchers.Main для UI, Dispatchers.IO для I/O, Dispatchers.Default для CPU-интенсивных задач. Их комбинируют, чтобы корутины запускались в нужных условиях и отменялись вместе с жизненным циклом.
1. CoroutineScope
GlobalScope — живёт до завершения JVM
viewModelScope — отменяется при уничтожении ViewModel
lifecycleScope — привязан к lifecycle Activity/Fragment
2. Dispatcher
Dispatchers.Main — главный (UI) поток
Dispatchers.IO — пул потоков для I/O операций
Dispatchers.Default — пул для CPU-нагрузки
newSingleThreadContext("MyThread") — собственный поток
3. Пример запуска:
viewModelScope.launch(Dispatchers.IO) {
val data = repository.load()
withContext(Dispatchers.Main) {
updateUi(data)
}
}4. Вывод:
Scope контролирует отмену
Dispatcher — выбор потока для работы