Sobes.tech
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

  1. Hozzon létre egy Handler-t: Kösse össze a Looper-rel a fő szálon.
  2. Küldjön egy Runnable-t vagy Message-t: A Handler segí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 egy Handler-t, amely a hozzá küldött üzeneteket a fő szálon dolgozza fel.
  • post(Runnable) a Runnable-t a Looper üzenetsorába helyezi és végrehajtja.
  • sendMessage(Message) üzenetet küld a Looper ü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.