За счет чего корутину можно приостанавливать

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

Ответ

Корутины можно приостанавливать благодаря механизму suspend-функций и Continuation Passing Style (CPS) под капотом. Когда корутина встречает suspend вызов, она сохраняет свое состояние (локальные переменные, точка остановки) в объекте Continuation и освобождает поток. После завершения suspend-операции (например, сетевого запроса) выполнение возобновляется с сохраненной точки.

Пример:

suspend fun fetchData(): String {
    delay(1000) // suspend-функция
    return "Data loaded"
}

Здесь delay() приостанавливает корутину без блокировки потока. Компилятор преобразует suspend-функции в конечный автомат с точками возобновления.