Работал ли с таймерами в корутинах

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

Ответ

Да, работал. В корутинах можно использовать delay() для простой задержки или withTimeout() для выполнения с таймаутом. Также есть flow с оператором onEach + delay для периодических действий.

Пример с withTimeout:

try {
    withTimeout(3000L) {
        // Долгая операция
        delay(5000L) // Будет отменена через 3 секунды
    }
} catch (e: TimeoutCancellationException) {
    Log.e("Timeout", "Operation timed out")
}

Для периодических задач лучше использовать flow:

flow {
    while (true) {
        emit(Unit)
        delay(1000L) // Каждую секунду
    }
}.onEach { /* Действие */ }.launchIn(viewModelScope)

Важно помнить про отмену корутин при onDestroy/onCleared.