Middle
Kako se mogu dobiti poruke na glavnoj niti pomoću Handler i Looper?
sobes.tech АИ
Одговор од АИ
- Kreirajte
Handler: Povežite ga saLooper-om glavne niti. - Pošaljite
RunnableiliMessage: KrozHandlerza izvršenje na povezanoj niti (u ovom slučaju, glavnoj).
// Na glavnoj niti
val mainHandler = Handler(Looper.getMainLooper())
// Kreiranje i slanje Runnable
mainHandler.post {
// Kod koji se izvršava na glavnoj niti
}
// Kreiranje i slanje Message
val message = Message.obtain().apply {
what = 1 // Nasumični identifikator poruke
obj = "hello" // Dodatni podaci
}
mainHandler.sendMessage(message)
Looper.getMainLooper()dobijaLooperpovezan sa glavnom niti.Handler(Looper.getMainLooper())kreiraHandlerkoji će obrađivati poruke poslata na njega na glavnoj niti.post(Runnable)stavljaRunnableu red porukaLooper-a za izvršenje.sendMessage(Message)šalje poruku u red porukaLooper-a.
Alternativa: Anonimna klasa Handler sa handleMessage
Možete prepisati metodu handleMessage u anonimnoj klasi Handler za obradu poruka.
// Na glavnoj ili drugoj niti gde je potrebno kreirati Handler za glavnu nit
val myHandler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
// Kod koji se izvršava na glavnoj niti pri primanju poruke
when (msg.what) {
1 -> {
val data = msg.obj as String
// Obrada podataka
}
}
}
}
// Slanje poruke sa druge niti
Thread {
val message = Message.obtain().apply {
what = 1
obj = "world"
}
myHandler.sendMessage(message)
}.start()
U ovom slučaju, pri primanju poruke, biće pozvana metoda handleMessage na glavnoj niti.