Sobes.tech
Middle

¿Cómo se pueden obtener mensajes en el hilo principal usando Handler y Looper?

sobes.tech AI

Respuesta de la IA

  1. Crear un Handler: Vincularlo con el Looper del hilo principal.
  2. Pasar un Runnable o Message: Enviarlos a través del Handler para su ejecución en el hilo asociado (en este caso, el principal).
// En el hilo principal
val mainHandler = Handler(Looper.getMainLooper())

// Crear y enviar un Runnable
mainHandler.post {
    // Código que se ejecuta en el hilo principal
}

// Crear y enviar un Message
val message = Message.obtain().apply {
    what = 1 // Identificador arbitrario del mensaje
    obj = "hello" // Datos adicionales
}
mainHandler.sendMessage(message)
  • Looper.getMainLooper() obtiene el Looper asociado con el hilo principal.
  • Handler(Looper.getMainLooper()) crea un Handler que procesará los mensajes enviados a él en el hilo principal.
  • post(Runnable) coloca el Runnable en la cola de mensajes del Looper para su ejecución.
  • sendMessage(Message) envía un mensaje a la cola de mensajes del Looper.

Alternativa: Clase anónima Handler con handleMessage

Se puede sobrescribir el método handleMessage en una clase anónima Handler para procesar los mensajes.

// En el hilo principal o en otro hilo donde se necesite crear un Handler para el hilo principal
val myHandler = object : Handler(Looper.getMainLooper()) {
    override fun handleMessage(msg: Message) {
        // Código que se ejecuta en el hilo principal al recibir un mensaje
        when (msg.what) {
            1 -> {
                val data = msg.obj as String
                // Procesar datos
            }
        }
    }
}

// Enviar un mensaje desde otro hilo
Thread {
    val message = Message.obtain().apply {
        what = 1
        obj = "world"
    }
    myHandler.sendMessage(message)
}.start()

En este caso, al recibir un mensaje, se llamará al método handleMessage en el hilo principal.