Вопрос раскрывает механизм работы main-потока и роль main.immediate.
Looper — бесконечный цикл обработки сообщений.
Handler — отправляет задачи в Looper.
main.immediate — выполняет задачу сразу, если текущий поток — main.
Looper
Бесконечно обрабатывает очередь сообщений (MessageQueue).
Handler
Отправляет Runnable или Message в Looper.
main.immediateЕсли вызов из main-потока — задача выполняется сразу.
Если из другого потока — добавляется в очередь.
Пример:
lifecycleScope.launch(Dispatchers.Main.immediate) {
// Если уже в main-потоке — выполнится сразу
}