Почему Handler может работать с главным потоком

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

Ответ

Handler позволяет отправлять и обрабатывать сообщения (Message) и Runnable-объекты в потоке, к которому привязан его Looper. Главный поток (UI-поток) уже имеет Looper по умолчанию, созданный в ActivityThread. Поэтому Handler, созданный в главном потоке без явного указания Looper, автоматически использует Looper главного потока.

Пример:

val handler = Handler(Looper.getMainLooper())
handler.post {
    // Код выполнится в главном потоке
    textView.text = "Updated"
}

Это безопасно, так как Looper.mainLooper гарантированно существует в UI-потоке. Однако, создание Handler в фоновом потоке без своего Looper вызовет исключение.