Будет ли переключение потока при запуске бесконечного цикла внутри корутины

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

Ответ

Бесконечный цикл внутри корутины не приведёт к автоматическому переключению потока. Корунтина выполняется в том же потоке, в котором была запущена, если явно не указан другой диспетчер.

Пример:

lifecycleScope.launch(Dispatchers.Default) {
    while (true) { // Блокирует поток Default dispatcher
        // Долгие вычисления
    }
}

Чтобы избежать блокировки потока:

  1. Используйте yield() для добровольной отдачи потока
  2. Разбивайте работу на части
  3. Используйте withContext(Dispatchers.IO) для CPU-intensive задач

Важно: бесконечные циклы в UI-потоке приведут к ANR!