Ответ
Бесконечный цикл внутри корутины не приведёт к автоматическому переключению потока. Корунтина выполняется в том же потоке, в котором была запущена, если явно не указан другой диспетчер.
Пример:
lifecycleScope.launch(Dispatchers.Default) {
while (true) { // Блокирует поток Default dispatcher
// Долгие вычисления
}
}
Чтобы избежать блокировки потока:
- Используйте
yield()для добровольной отдачи потока - Разбивайте работу на части
- Используйте
withContext(Dispatchers.IO)для CPU-intensive задач
Важно: бесконечные циклы в UI-потоке приведут к ANR!