Как Handler помогает выполнять асинхронную работу

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

Ответ

Handler позволяет отправлять и обрабатывать сообщения (Message) и задачи (Runnable) в определенном потоке. Основные сценарии:

  1. Работа с UI из фонового потока:
val handler = Handler(Looper.getMainLooper())
thread {
    // Фоновая работа
    handler.post { 
        // Обновляем UI в главном потоке
        textView.text = "Done"
    }
}
  1. Отложенное выполнение:
handler.postDelayed({
    // Выполнится через 1 секунду
}, 1000)
  1. Межпоточная коммуникация через Message:
val handler = object : Handler(Looper.getMainLooper()) {
    override fun handleMessage(msg: Message) {
        // Обработка сообщения в главном потоке
    }
}

thread {
    val msg = handler.obtainMessage().apply {
        what = 1
        obj = "Data"
    }
    handler.sendMessage(msg)
}

Handler привязан к Looper'у потока, что обеспечивает безопасное выполнение кода в нужном потоке.