Как Coroutine обеспечивает асинхронность

«Как Coroutine обеспечивает асинхронность» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Coroutine — это легковесный поток, работающий поверх основного потока. В отличие от потоков ОС, корутины дешево создавать и переключать. Они используют механизм suspension (приостановки) вместо блокировки, что позволяет эффективно управлять асинхронными операциями.

Корутина приостанавливается (suspend) при встрече с долгой операцией (например, сетевой запрос), освобождая поток для других задач. Когда операция завершается, корутина возобновляется (resume) в том же или другом потоке.

Пример:

viewModelScope.launch {
    val data = withContext(Dispatchers.IO) { // переключаемся на IO поток
        repository.fetchData() // suspend функция
    }
    updateUi(data) // выполняется в Main потоке
}

Ключевые преимущества:

  • Нет блокировки потока
  • Читаемый последовательный код
  • Встроенная отмена операций
  • Минимальные накладные расходы