Middle
Как можете да получите съобщения в основния поток с помощта на Handler и Looper?
sobes.tech AI
Отговор от AI
- Създайте
Handler: Свържете го сLooperна основния поток. - Изпратете
RunnableилиMessage: ЧрезHandlerза изпълнение в свързания поток (в този случай - основния).
// В основния поток
val mainHandler = Handler(Looper.getMainLooper())
// Създаване и изпращане на Runnable
mainHandler.post {
// Код, изпълняван в основния поток
}
// Създаване и изпращане на Message
val message = Message.obtain().apply {
what = 1 // Произволен идентификатор на съобщението
obj = "hello" // Допълнителни данни
}
mainHandler.sendMessage(message)
Looper.getMainLooper()получаваLooper, свързан с основния поток.Handler(Looper.getMainLooper())създаваHandler, който ще обработва съобщения, изпратени към него, в основния поток.post(Runnable)поставяRunnableв опашката с съобщения наLooperза изпълнение.sendMessage(Message)изпраща съобщение в опашката с съобщения наLooper.
Алтернатива: Анонимна класа Handler с handleMessage
Може да препишете метода handleMessage в анонимен клас Handler, за да обработвате съобщения.
// В основния поток или друг поток, където трябва да създадете Handler за основния поток
val myHandler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
// Код, изпълняван в основния поток при получаване на съобщение
when (msg.what) {
1 -> {
val data = msg.obj as String
// Обработка на данните
}
}
}
}
// Изпращане на съобщение от друг поток
Thread {
val message = Message.obtain().apply {
what = 1
obj = "world"
}
myHandler.sendMessage(message)
}.start()
В този случай, при получаване на съобщение, ще бъде извикван методът handleMessage в основния поток.