Prevencion de ANR - haroldVirguez/VINYLS-MOBILE GitHub Wiki

Análisis de ANR mediante Firebase Test Lab

Objetivo

Evaluar y mitigar riesgos de ANR (Application Not Responding) mediante la ejecución de pruebas automatizadas en Firebase Test Lab, con el propósito de mejorar la estabilidad y la experiencia del usuario antes de la publicación de la aplicación.

Herramienta utilizada

Firebase Test Lab actúa como una infraestructura de pruebas en la nube que permite ejecutar la APK sobre una amplia matriz de dispositivos físicos y virtuales. La plataforma facilita pruebas sistemáticas, reproducibles y orientadas a detectar comportamientos anómalos bajo condiciones reales de uso.

Metodología aplicada

  1. Carga del artefacto: Se sube la APK a la consola de Test Lab para iniciar el proceso de evaluación.
  2. Ejecución de pruebas:
    • Robo Tests, que exploran automáticamente la interfaz para cubrir de forma amplia los distintos caminos de navegación.
    • Pruebas instrumentadas, diseñadas para validar flujos críticos y comportamientos específicos de la aplicación.
  3. Análisis posterior: Se revisan los informes generados por Test Lab para identificar señales tempranas de ANR, bloqueos en el hilo principal, operaciones costosas y cualquier cuello de botella asociado al rendimiento.

Resultados obtenidos

En cada ejecución, Firebase Test Lab genera un conjunto completo de artefactos que permiten un análisis profundo:

Grafico de rastreo

Capturas de pantalla

Video

https://github.com/user-attachments/assets/98a29496-58b1-4db9-a127-9fd535cbcd03

Resumen de la prueba de rastreo

La prueba de rastreo se ejecutó durante 5 minutos, finalizando por tiempo de espera agotado, lo que indica que el proceso alcanzó el límite de duración configurado antes de completar la exploración total de la aplicación.

Durante este período, el sistema automatizado registró:

  • 221 acciones ejecutadas, reflejando una exploración amplia de la interfaz.
  • 1 actividad identificada, lo que sugiere que la navegación se concentró en una única actividad principal.
  • 55 pantallas detectadas, demostrando una cobertura visual considerable de los distintos estados de la aplicación.

En conjunto, estos datos evidencian que el rastreo alcanzó una interacción profunda con la aplicación, aportando información útil para el análisis de rendimiento, navegación y posibles puntos de bloqueo.

Prueba de Rendimiento

La prueba muestra un tiempo de visualización inicial rápido (1s 298ms) pero con actividad sostenida durante la sesión (≈5 min). Las interacciones del usuario (pulsaciones y desplazamientos) se registran en varios instantes iniciales y el perfil del sistema revela CPU con picos frecuentes y una memoria que crece de forma gradual en un patrón escalonado. El tráfico de red durante la prueba es prácticamente nulo. En conjunto, el comportamiento sugiere que la app arranca correctamente pero mantiene trabajo en segundo plano o realiza asignaciones recurrentes durante el uso, lo que puede afectar la fluidez en sesiones largas o en dispositivos de gama baja.

Métricas clave observadas

  • Tiempo de visualización inicial: 1s 298ms (cold/warm start aceptable).
  • CPU: actividad constante con picos (picos visibles hasta ~20% en el gráfico). Uso base fluctuante — indica operaciones periódicas en main/worker threads.
  • Memoria (RAM): tendencia creciente con patrón "sawtooth" (subidas y descargas parciales). Máximo observado cercano a ~200 MB (según escala del gráfico).
  • Red: flujo bajo (sin picos relevantes durante la prueba).
  • Eventos de interacción: pulsaciones sostenidas en ImageView, clicks en FrameLayout y desplazamientos en ScrollView en los primeros 20 segundos.

Beneficios clave

  • Detección temprana de ANR y problemas de rendimiento antes de llegar a los usuarios finales.
  • Identificación automática de regresiones en rutas funcionales críticas durante el ciclo de desarrollo.
  • Disponibilidad de evidencias visuales y métricas que simplifican la depuración, la toma de decisiones técnicas y la mejora continua del producto.