Как ведет себя поток с пустой очередью у Looper

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

Ответ

Looper с пустой очередью не блокирует поток, а продолжает выполнение. Однако, если в очереди нет сообщений (MessageQueue пуста), Looper будет ждать (MessageQueue.next() заблокируется) до появления новых сообщений или пока не будет вызван quit().

Пример:

val handlerThread = HandlerThread("MyThread").apply { start() }
val handler = Handler(handlerThread.looper)

// Отправляем сообщение с задержкой
handler.postDelayed({ 
    Log.d("TEST", "Message processed") 
}, 1000)

// Looper будет ждать 1 секунду, затем обработает сообщение

Важно: Looper не потребляет CPU в режиме ожидания, используя механизм epoll в Linux.