Middle
Hogyan lehet üzeneteket kapni a fő szálon Handler és Looper segítségével?
sobes.tech MI
Válasz az MI-től
- Hozzon létre egy
Handler-t: Kösse össze aLooper-rel a fő szálon. - Küldjön egy
Runnable-t vagyMessage-t: AHandlersegítségével a hozzárendelt szálon való végrehajtásra.
// A fő szálon
val mainHandler = Handler(Looper.getMainLooper())
// Runnable létrehozása és küldése
mainHandler.post {
// Kód, amely a fő szálon fut
}
// Message létrehozása és küldése
val message = Message.obtain().apply {
what = 1 // Véletlenszerű üzenetazonosító
obj = "hello" // További adatok
}
mainHandler.sendMessage(message)
Looper.getMainLooper()a fő szálhoz kapcsolódóLooper-t adja vissza.Handler(Looper.getMainLooper())létrehoz egyHandler-t, amely a hozzá küldött üzeneteket a fő szálon dolgozza fel.post(Runnable)aRunnable-t aLooperüzenetsorába helyezi és végrehajtja.sendMessage(Message)üzenetet küld aLooperüzenetsorába.
Alternatíva: névtelen Handler osztály handleMessage-szel
Felülírhatja a handleMessage metódust egy névtelen Handler osztályban az üzenetek feldolgozásához.
// A fő szálon vagy más szálon, ahol szükséges létrehozni egy Handler-t a fő szálhoz
val myHandler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
// Kód, amely a fő szálon fut az üzenet fogadásakor
when (msg.what) {
1 -> {
val data = msg.obj as String
// Adatok feldolgozása
}
}
}
}
// Üzenet küldése más szálról
Thread {
val message = Message.obtain().apply {
what = 1
obj = "world"
}
myHandler.sendMessage(message)
}.start()
Ebben az esetben az üzenet fogadásakor a handleMessage metódus lesz meghívva a fő szálon.