Ответ
Coroutines упрощают асинхронное программирование, заменяя колбэки и сложные цепочки Thread/Handler. Они позволяют писать последовательный код, который выполняется асинхронно, без блокировки основного потока.
Преимущества:
- Легковесность (могут работать тысячи корутин без нагрузки на систему)
- Отмена операций (через
JobилиSupervisorJob) - Structured Concurrency (автоматическая отмена дочерних корутин)
Пример:
viewModelScope.launch {
val data = withContext(Dispatchers.IO) { fetchData() }
updateUI(data) // Автоматически возвращается в Main-поток
}
Работает на Dispatchers (IO, Default, Main), поддерживает suspend-функции.