POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Concurrencia en Android - Parte II

Concurrencia en Android: Parte II

Publicado el 02/09/2025

Nota: este artículo forma parte de una serie práctica sobre el modelo de concurrencia en Android. En la primera parte repasamos Handler, Message, Runnable y AsyncTask con un caso de uso típico: descargar una imagen desde Internet sin bloquear la interfaz.

En esta segunda parte profundizamos en el corazón del modelo de concurrencia de Android: Looper, Message Queue y Handler, cómo se coordinan y cómo emplearlos para comunicar el hilo principal de la interfaz con un hilo de trabajo. Además, veremos por qué objetos de sincronización como CountDownLatch son útiles para evitar condiciones de carrera.

Modelo asíncrono en una frase: un Handler publica Runnables o envía Messages a la cola de mensajes del Looper, y el Looper procesa esa cola en un bucle continuo, entregando cada mensaje al Handler adecuado para su ejecución en el hilo asociado.

Message loop y Looper: toda interfaz reactiva gira alrededor de un bucle de mensajes. En Android, Looper implementa este patrón. La función prepare crea la Message Queue y garantiza un Looper por hilo mediante almacenamiento local de hilo. El hilo que invoca Looper.prepare pasa a ser el hilo del Looper. La función loop entra en un bucle infinito que extrae mensajes de la cola de manera bloqueante y los distribuye con dispatchMessage al Handler objetivo.

Handler: es el ayudante que conoce el Looper y su Message Queue. Un Handler creado en un hilo con Looper publica mensajes en la cola de ese hilo. El hilo principal de Android ya dispone de Looper, por eso podemos crear Handlers asociados al UI thread sin preparación adicional. Si intentas instanciar un Handler en un hilo sin Looper, fallará porque no hay cola donde encolar los mensajes.

Hilos de trabajo con Looper propio: para que un hilo de fondo procese mensajes, prepara su Looper y crea un Handler asociado antes de iniciar el bucle de mensajes. Secuencia típica: 1 preparar Looper con Looper.prepare 2 crear un Handler sobrescribiendo handleMessage para procesar lo que llegue 3 señalizar que el hilo está listo 4 iniciar Looper.loop para comenzar a consumir la cola.

Enviar mensajes del UI thread a un worker thread sin carreras: 1 en la actividad crea un CountDownLatch con 1 2 arranca el worker pasando la referencia del latch 3 en run del worker invoca Looper.prepare, crea su Handler y al finalizar la configuración ejecuta latch.countDown para indicar que ya puede recibir mensajes 4 de vuelta en la actividad espera con latch.await hasta que el worker esté listo 5 obtén y envía un Message mediante workerThreadHandler.sendMessage 6 en handleMessage del worker realiza el trabajo y, si necesitas tocar la interfaz, usa runOnUiThread o un Handler del hilo principal para publicar el resultado sin bloquear ni violar restricciones de UI.

Buenas prácticas para producción: usa HandlerThread cuando necesites un hilo con Looper persistente administrado por Android; libera el bucle con quit o quitSafely cuando el hilo ya no sea necesario; evita fugas de memoria declarando Handlers estáticos internos con WeakReference al contexto; para flujos modernos considera Kotlin Coroutines con Dispatchers, WorkManager para tareas garantizadas y RxJava si tu proyecto lo requiere, sin perder de vista que internamente Android sigue basándose en Looper, MessageQueue y Handler.

Ejemplo resumido de flujo de mensajes: 1 la actividad arranca el WorkerThread 2 el worker prepara su Looper y crea su Handler 3 el worker avisa con CountDownLatch que ya está listo 4 la actividad envía un Message al Handler del worker 5 el worker procesa el mensaje y devuelve feedback al UI mediante un post al hilo principal.

Q2BSTUDIO puede ayudarte a diseñar arquitecturas móviles robustas que apliquen correctamente este modelo asíncrono, desde la capa de concurrencia hasta la integración con servicios backend y observabilidad. Somos una empresa de desarrollo con foco en aplicaciones a medida y software a medida, especialistas en inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio con power bi, además de automatización de procesos y agentes IA para empresas. Si buscas un equipo que combine rendimiento, seguridad y escalabilidad, descubre cómo abordamos proyectos de aplicaciones a medida y cómo potenciamos productos con inteligencia artificial.

Conclusión: comprender Looper, MessageQueue y Handler es esencial para diseñar apps Android fluidas y seguras. Controlar cuándo crear un Looper, cómo sincronizar el arranque de hilos con CountDownLatch y cómo comunicar hilos de manera segura evita bloqueos y carreras. Este conocimiento, combinado con prácticas modernas como HandlerThread o coroutines, te permitirá crear experiencias móviles de alto nivel listas para escalar.

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio