Как Looper работает с сообщениями

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

Ответ

Looper — это механизм, который обрабатывает сообщения (Message) в потоке, создавая для него бесконечный цикл (loop()). Он извлекает сообщения из MessageQueue и передает их Handler для обработки.

Основные компоненты:

  1. MessageQueue — очередь сообщений (FIFO).
  2. Handler — отправляет и обрабатывает сообщения.
  3. Looper — управляет циклом обработки.

Пример:

class WorkerThread : Thread() {
    lateinit var handler: Handler  

    override fun run() {
        Looper.prepare() // Инициализация Looper для потока  
        handler = object : Handler(Looper.myLooper()!!) {  
            override fun handleMessage(msg: Message) {  
                // Обработка сообщения  
            }  
        }  
        Looper.loop() // Запуск цикла  
    }  
}  

Нюансы:

  • Looper нельзя создать без вызова prepare().
  • Главный поток (MainThread) уже имеет Looper по умолчанию.
  • loop() работает бесконечно, пока не будет вызван quit().