Cómo solucionar problemas de rendimiento comunes

Para ofrecer una experiencia de app fluida, estable y eficiente en cuanto al uso de la batería, es necesario identificar y resolver los cuellos de botella comunes del rendimiento en cuanto a la estabilidad, la renderización de la IU, el consumo de memoria, el trabajo en segundo plano, la latencia de inicio y la optimización de la compilación.

En las guías de esta sección, se explica el comportamiento subyacente de la plataforma de Android para cada tipo de problema y se describe cómo diagnosticarlos, generar perfiles y corregirlos con herramientas como Android Studio Profiler, Perfetto, Logcat y ApplicationExitInfo.

Estabilidad

  • ANR: Diagnostica y corrige los errores de Aplicación no responde (ANR) causados por subprocesos de IU bloqueados, E/S del subproceso principal, contención de bloqueo o receptores de emisión lentos.
  • Fallas: Lee los seguimientos de pila, inspecciona el resultado de Logcat y evita las excepciones no controladas y los indicadores nativos.

Renderización y arranque

  • Renderización lenta: Identifica y corrige los fotogramas de IU congelados o que se omitieron (>16ms y >700ms) causados por diseños costosos, pases de vinculación o bloqueos del subproceso principal.
  • Sesiones lentas (solo para juegos): Mide el ritmo de fotogramas con SurfaceFlinger y optimiza las velocidades de fotogramas de los juegos con Android Frame Pacing (Swappy), Vulkan y el framework de rendimiento dinámico de Android (ADPF).
  • Tiempo de inicio de la app: Comprende los aspectos internos de los inicios en frío, semicaliente y en caliente, mide el tiempo para la visualización inicial (TTID) y el tiempo para la visualización completa (TTFD), y optimiza el trabajo de inicio.

Administración de la memoria

Batería y trabajo en segundo plano

Permisos y optimización de la compilación

  • Rechazos de permisos: Solicita permisos de tiempo de ejecución en contexto y explica claramente a los usuarios el motivo de los permisos.
  • Optimización de código DEX: Configura las reglas de reducción, ofuscación y optimización de R8 para reducir el tamaño del DEX y mejorar el rendimiento del tiempo de ejecución.