Sobes.tech
Middle

Ako získať správy na hlavnom vlákne pomocou Handler a Looper?

sobes.tech AI

Odpoveď od AI

  1. Vytvorte Handler: Pripojte ho k Looper-u hlavného vlákna.
  2. Pošlite Runnable alebo Message: Prostredníctvom Handler na 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íska Looper spojený 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ží Runnable do fronty správ Looper-a na vykonanie.
  • sendMessage(Message) odošle správu do fronty správ Looper-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.