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

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

Ответ

Корутины можно приостанавливать и возобновлять с помощью suspend-функций и механизма Continuation. Когда корутина встречает suspend-функцию, она приостанавливается, освобождая поток, а Continuation сохраняет состояние для последующего возобновления.

Пример:

suspend fun fetchData(): String {
    delay(1000) // suspend-функция, корутина приостанавливается
    return "Data loaded"
}

viewModelScope.launch {
    val data = fetchData() // возобновляется после выполнения delay
    println(data)
}

Ключевые механизмы:

  • suspend – маркирует функции, которые могут приостанавливать выполнение.
  • Диспетчеры (Dispatchers) определяют, на каком потоке корутина возобновляется.
  • Continuation – callback, сохраняющий контекст для возобновления.