Middle
Hoe kun je berichten krijgen op de hoofdthread met Handler en Looper?
sobes.tech AI
Antwoord van AI
- Maak een
Handler: Koppel deze aan deLoopervan de hoofdthread. - Stuur een
RunnableofMessage: Via deHandlervoor uitvoering op de bijbehorende thread (in dit geval, de hoofdthread).
// Op de hoofdthread
val mainHandler = Handler(Looper.getMainLooper())
// Maak en stuur een Runnable
mainHandler.post {
// Code die op de hoofdthread wordt uitgevoerd
}
// Maak en stuur een Message
val message = Message.obtain().apply {
what = 1 // Willekeurige bericht-ID
obj = "hello" // Extra gegevens
}
mainHandler.sendMessage(message)
Looper.getMainLooper()krijgt deLooperdie verbonden is met de hoofdthread.Handler(Looper.getMainLooper())maakt eenHandlerdie berichten verwerkt die naar hem worden gestuurd op de hoofdthread.post(Runnable)plaatst deRunnablein de berichtwachtrij van deLoopervoor uitvoering.sendMessage(Message)stuurt een bericht naar de berichtwachtrij van deLooper.
Alternatief: Anonieme Handler-klasse met handleMessage
Je kunt de methode handleMessage overschrijven in een anonieme Handler-klasse om berichten te verwerken.
// Op de hoofdthread of een andere thread waar je een Handler voor de hoofdthread wilt maken
val myHandler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
// Code die wordt uitgevoerd op de hoofdthread bij ontvangst van een bericht
when (msg.what) {
1 -> {
val data = msg.obj as String
// Verwerk gegevens
}
}
}
}
// Verstuur een bericht vanaf een andere thread
Thread {
val message = Message.obtain().apply {
what = 1
obj = "world"
}
myHandler.sendMessage(message)
}.start()
In dit geval wordt bij ontvangst van een bericht de handleMessage-methode op de hoofdthread aangeroepen.