Sobes.tech
Middle

Kako se mogu dobiti poruke na glavnoj niti pomoću Handler i Looper?

sobes.tech АИ

Одговор од АИ

  1. Kreirajte Handler: Povežite ga sa Looper-om glavne niti.
  2. Pošaljite Runnable ili Message: Kroz Handler za 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() dobija Looper povezan sa glavnom niti.
  • Handler(Looper.getMainLooper()) kreira Handler koji će obrađivati poruke poslata na njega na glavnoj niti.
  • post(Runnable) stavlja Runnable u red poruka Looper-a za izvršenje.
  • sendMessage(Message) šalje poruku u red poruka Looper-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.