Ответ
Корутины — это легковесные потоки для асинхронного выполнения кода без блокировки основного потока. Они позволяют писать асинхронный код последовательно, используя suspend-функции.
Ключевые особенности:
- Легковесность: тысячи корутин могут работать параллельно с минимальными накладными расходами.
- Structured Concurrency: корутины привязаны к
CoroutineScope, что упрощает управление их жизненным циклом. - Отмена (cancellation): поддерживают отмену через
Job.cancel().
Пример:
suspend fun fetchData(): String {
delay(1000) // Неблокирующая задержка
return "Data loaded"
}
fun loadData() {
CoroutineScope(Dispatchers.IO).launch {
val data = fetchData()
withContext(Dispatchers.Main) {
textView.text = data // Обновление UI в главном потоке
}
}
}
Диспетчеры:
Dispatchers.Main— UI-поток (Android).Dispatchers.IO— для операций ввода-вывода.Dispatchers.Default— CPU-интенсивные задачи.