Middle
Kā var saņemt ziņojumus galvenajā pavedienā, izmantojot Handler un Looper?
sobes.tech AI
Atbilde no AI
- Izveidot
Handler: sasaistīt to arLooper, kas ir galvenās pavediena. - Pārsūtīt
RunnablevaiMessage: nosūtīt tos caurHandler, lai izpildītu saistītajā pavedienā (šajā gadījumā - galvenajā).
// Galvenajā pavedienā
val mainHandler = Handler(Looper.getMainLooper())
// Izveidot un nosūtīt Runnable
mainHandler.post {
// Kods, kas tiek izpildīts galvenajā pavedienā
}
// Izveidot un nosūtīt Message
val message = Message.obtain().apply {
what = 1 // Nejaušs ziņojuma identifikators
obj = "hello" // Papildu dati
}
mainHandler.sendMessage(message)
Looper.getMainLooper()iegūstLooper, kas ir saistīts ar galveno pavedienu.Handler(Looper.getMainLooper())izveidoHandler, kas apstrādās ziņojumus, kas nosūtīti tam, galvenajā pavedienā.post(Runnable)ievietoRunnableLooperziņojumu rindā, lai tas tiktu izpildīts.sendMessage(Message)nosūta ziņojumuLooperziņojumu rindā.
Alternatīva: anonīma Handler klase ar handleMessage
Var pārdefinēt handleMessage metodi anonīmā Handler klasē, lai apstrādātu ziņojumus.
// Galvenajā vai citā pavedienā, kur nepieciešams izveidot `Handler` galvenajam pavedienam
val myHandler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
// Kods, kas tiek izpildīts galvenajā pavedienā, saņemot ziņojumu
when (msg.what) {
1 -> {
val data = msg.obj as String
// Datu apstrāde
}
}
}
}
// Nosūtīt ziņojumu no cita pavediena
Thread {
val message = Message.obtain().apply {
what = 1
obj = "world"
}
myHandler.sendMessage(message)
}.start()
Šajā gadījumā, saņemot ziņojumu, tiks izsaukta handleMessage metode galvenajā pavedienā.