Ответ
Handler позволяет отправлять и обрабатывать сообщения (Message) и задачи (Runnable) в определенном потоке. Основные сценарии:
- Работа с UI из фонового потока:
val handler = Handler(Looper.getMainLooper())
thread {
// Фоновая работа
handler.post {
// Обновляем UI в главном потоке
textView.text = "Done"
}
}
- Отложенное выполнение:
handler.postDelayed({
// Выполнится через 1 секунду
}, 1000)
- Межпоточная коммуникация через 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'у потока, что обеспечивает безопасное выполнение кода в нужном потоке.