¿Cómo funciona la arquitectura Handler and Message Passing en Android?

Ok, voy a intentarlo, pero asegúrate de revisar los recursos que he mencionado al final de la respuesta.

Un messageQueue se puede visualizar como una cola de tareas para Thread, el Thread que tiene un messageQueue adjunto verificará para ver si queda algún otro mensaje / ejecutable en su cola que deba ejecutarse.

Por defecto, un hilo creado usando la clase java.lang.Thread no tendrá un MessageQueue asociado. Es solo un hilo viejo y simple.

Ingrese Looper, la clase Looper (“Clase utilizada para ejecutar un bucle de mensajes para un hilo”), The Looper tiene 2 métodos principales,

-prepare () que prepara el messageQueue para el subproceso asociado.
– El método loop () comenzará a ejecutar el bucle de mensaje para el hilo actual.

(Ambas llamadas deben estar en el método run () del subproceso del receptor)

El método de bucle se asegurará de que el hilo revise / sondee periódicamente la cola de mensajes para ver si hay mensajes nuevos.

Pero tiene que haber una forma en la que pueda enviar mensajes a la Cola de mensajes de Thread en particular. Aquí es donde entra en juego el controlador.

“Un controlador le permite enviar y procesar mensajes y objetos ejecutables asociados con MessageQueue de un hilo”.

El controlador siempre está conectado al hilo en el que se supone que debe enviar mensajes.

En Android, de manera predeterminada, si se crea un controlador pasando nulo, se adjunta al hilo principal de la interfaz de usuario.

El controlador proporciona métodos para manejar (recibir) mensajes, así como enviar y programar mensajes.

Aquí hay un código de muestra de cómo se vería esto

manipulador público mHandler;

@Anular
public void run () {
Looper.prepare ();

mHandler = nuevo controlador () {
public void handleMessage (Mensaje msg) {
// Actúa sobre el mensaje
}
};
Looper.loop ();
}

La arquitectura de paso de mensajes es de gran ayuda para delegar el trabajo en subprocesos de trabajo y recibir notificaciones cuando se realiza un trabajo en particular.

Supongamos que estamos obteniendo un archivo del servidor. El subproceso principal podría derivar un subproceso / servicio de trabajo y pasar una instancia de su controlador.

El subproceso de trabajo al finalizar podría publicar un mensaje en mainThread utilizando la instancia del controlador mainThread, mainThread se haría cargo nuevamente y procesaría la información.

Lectura extra :
MultiThreading sin bloqueo,
Grand Central Dispatch.

Recursos:

Looper | Desarrolladores de Android
Manejador | Desarrolladores de Android
Ingeniería móvil: ideas y consejos sobre el desarrollo de iOS y Android
Android Guts: Introducción a Loopers y Handlers
Android: pasar datos entre el hilo principal y los hilos de trabajo.

El controlador hace que la tarea sea muy simple para pasar mensajes. Puede consultar el enlace para obtener más información.
Android Loopers and Handlers – Explicación detallada