Middle
Ako získať správy na hlavnom vlákne pomocou Handler a Looper?
sobes.tech AI
Odpoveď od AI
- Vytvorte
Handler: Pripojte ho kLooper-u hlavného vlákna. - Pošlite
RunnablealeboMessage: ProstredníctvomHandlerna vykonanie v pripojenom vlákne (v tomto prípade hlavnom).
// Na hlavnom vlákne
val mainHandler = Handler(Looper.getMainLooper())
// Vytvorenie a odoslanie Runnable
mainHandler.post {
// Kód vykonávaný na hlavnom vlákne
}
// Vytvorenie a odoslanie Message
val message = Message.obtain().apply {
what = 1 // Náhodný identifikátor správy
obj = "hello" // Dodatočné údaje
}
mainHandler.sendMessage(message)
Looper.getMainLooper()získaLooperspojený s hlavným vláknom.Handler(Looper.getMainLooper())vytvoríHandler, ktorý bude spracovávať správy odoslané na neho na hlavnom vlákne.post(Runnable)vložíRunnabledo fronty správLooper-a na vykonanie.sendMessage(Message)odošle správu do fronty správLooper-a.
Alternatíva: Anonymná trieda Handler s handleMessage
Môžete prepísať metódu handleMessage v anonymnej triede Handler na spracovanie správ.
// Na hlavnom alebo inom vlákne, kde je potrebné vytvoriť Handler pre hlavné vlákno
val myHandler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
// Kód, ktorý sa vykoná na hlavnom vlákne pri prijatí správy
when (msg.what) {
1 -> {
val data = msg.obj as String
// Spracovanie dát
}
}
}
}
// Odoslanie správy z iného vlákna
Thread {
val message = Message.obtain().apply {
what = 1
obj = "world"
}
myHandler.sendMessage(message)
}.start()
V tomto prípade bude pri prijatí správy volaná metóda handleMessage na hlavnom vlákne.