Ответ
Да, работал. В корутинах можно использовать 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.
Ответ 18+ 🔞
Ну вот, опять про эти ваши корутины. Сижу, значит, смотрю на код, а там 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 всё это добро отменялось. А то будет тебе не корутина, а манда с ушами — вечно висящий процесс, который потом только перезагрузкой телефона убьёшь.
Короче, инструменты мощные, но если использовать их как попало, то доверия ебать ноль — только проблемы себе наживёшь.