Instructivos

Guía de niveles para tu recorrido de rendimiento

Lectura de 9 min
Alice Yuan
Ingeniera de Relaciones con Desarrolladores

Guía de niveles para tu recorrido de rendimiento

Te damos la bienvenida al día 4 de la Semana de Destacados de Rendimiento. Ahora que conoces algunas de las increíbles herramientas y prácticas recomendadas que presentamos recientemente, como el optimizador R8 y la optimización guiada por perfil con perfiles de Baselineperfiles de inicio, tal vez te preguntes por dónde comenzar tu recorrido para mejorar el rendimiento. 

Creamos una guía paso a paso para nivelar el rendimiento y satisfacer las necesidades de tu equipo de desarrollo para dispositivos móviles, ya sea que tengas una app con un solo desarrollador que quiera comenzar a trabajar en el rendimiento o que tengas un equipo completo dedicado a mejorar el rendimiento de Android. 

La guía de nivelación del rendimiento incluye 5 niveles. Comenzaremos con el nivel 1, que presenta herramientas de rendimiento con un esfuerzo de adopción mínimo, y llegaremos hasta el nivel 5, ideal para las apps que tienen los recursos necesarios para mantener un marco de trabajo de rendimiento personalizado.

 
Puedes ir al nivel que más te interese:

Nivel 1:  Usa la supervisión de campos que proporciona Play Console

Te recomendamos que primero aproveches Android vitals en Play Console para ver los datos de supervisión de campo recopilados automáticamente, lo que te brindará estadísticas sobre tu aplicación con un esfuerzo mínimo.

Android vitals es una iniciativa de Google para recopilar y mostrar automáticamente estos datos de campo.

A continuación, se explica cómo proporcionamos estos datos:

  1. Recopilación de datos: Cuando un usuario acepta, su dispositivo Android registra automáticamente los eventos clave de rendimiento y estabilidad de todas las apps, incluida la tuya.
  2. Datos Agregados: Google Play recopila y anonimiza estos datos de los usuarios de tu app.
  3. Estadísticas de Surface: Los datos se presentan en el panel de Android vitals en Google Play Console.

El panel de Android vitals hace un seguimiento de muchas métricas, pero algunas se designan como Core Vitals. Estas son las más importantes porque pueden afectar la visibilidad y la clasificación de tu app en Google Play Store.

Las métricas esenciales

MÉTRICAS PRINCIPALES DE CALIDAD TÉCNICA DE GOOGLE PLAY

Para maximizar la visibilidad en Google Play, mantén tu app por debajo de los umbrales de comportamiento inadecuado para estas métricas.

Tasa de fallas percibidas por el usuarioEs el porcentaje de usuarios activos por día que experimentaron al menos una falla que es probable que se haya notado.
Tasa de errores de ANR percibidos por el usuarioEs el porcentaje de usuarios activos por día que experimentaron al menos un error de ANR que es probable que hayan notado.
Uso de batería excesivoPorcentaje de sesiones de la cara de reloj en las que el uso de batería supera el 4.44% por hora
Nuevo: Bloqueos de activación parciales excesivosPorcentaje de sesiones de usuario en las que el uso acumulativo y no exento del bloqueo de activación supera las 2 horas

Las métricas esenciales incluyen la tasa de fallas percibidas por el usuario, la tasa de ANR, el uso de batería excesivo y la métrica recientemente introducida sobre los bloqueos de activación parciales excesivos.

Tasa de errores de ANR percibidos por el usuario

Puedes usar el panel de Android vitals sobre errores de ANR para ver los seguimientos de pila de los problemas que ocurren en el campo y obtener estadísticas y recomendaciones sobre cómo solucionar el problema. 

crashesAnrs.png

Puedes desglosar un error de ANR específico que ocurrió para ver el seguimiento de pila y las estadísticas sobre qué podría estar causando el problema.

insights.png

Además, consulta nuestra guía sobre errores de ANR para diagnosticar y corregir las situaciones comunes en las que pueden ocurrir errores de ANR. 

Tasa de fallas percibidas por el usuario 

Usa el panel de fallas de Android vitals para depurar aún más las fallas y ver una muestra de los seguimientos de pila que ocurren en tu app. 

Nuestra documentación también incluye orientación para solucionar problemas específicos de fallas. Por ejemplo, la guía para solucionar problemas de servicios en primer plano analiza formas de identificar y corregir situaciones comunes en las que se producen fallas.

Uso de batería excesivo 

Para reducir las sesiones de cara de reloj con un uso excesivo de la batería en Wear OS, consulta la guía de Wear sobre cómo mejorar y conservar la batería

[Nuevo] Bloqueos de activación parciales excesivos

 

Recientemente, anunciamos que las apps que superen el umbral de bloqueos de activación parcial excesivos podrían recibir un tratamiento adicional a partir del 1 de marzo de 2026

En el caso de los dispositivos móviles, la métrica de Android vitals se aplica a los bloqueos de activación no exentos que se adquieren mientras la pantalla está apagada y la app está en segundo plano o ejecutando un servicio en primer plano. Android vitals considera que el uso de bloqueos de activación parciales es excesivo si los bloqueos de activación se mantienen durante al menos dos horas en un período de 24 horas y afectan a más del 5% de las sesiones de tu app, en promedio durante 28 días.

Para depurar y corregir problemas de bloqueo de activación excesivo, consulta nuestra entrada de blog técnica.

Consulta nuestra documentación de Android vitals y continúa tu recorrido para aprovechar mejor Android vitals.

Nivel 2: Sigue los elementos de acción de la Puntuación de rendimiento de la aplicación

A continuación, usa la puntuación de rendimiento de la app para encontrar los elementos de acción de alto impacto que te permitirán mejorar el rendimiento de tu app.

La Puntuación de rendimiento de la app para Android es un marco de trabajo estandarizado para medir el rendimiento técnico de tu app. Te proporciona una puntuación entre 0 y 100, en la que un número más bajo indica que hay más margen de mejora.

Para obtener resultados fácilmente, primero debes comenzar con la puntuación de rendimiento estática. A menudo, se trata de cambios en la configuración o actualizaciones de herramientas que proporcionan mejoras significativas en el rendimiento.

Paso 1: Realiza la evaluación estática

La evaluación estática evalúa la configuración de tu proyecto y la adopción de herramientas. Estas suelen ser las formas más rápidas de mejorar el rendimiento.

Navega a la sección Puntuación estática de la página de la tabla de clasificaciones y haz lo siguiente:

  1. Evalúa la versión del complemento de Android para Gradle (AGP).
  2. Adopta la reducción de R8 de forma incremental o, idealmente, usa R8 en modo completo para reducir y optimizar el código de la app.
  3. Adopta los perfiles de Baseline, que mejoran la velocidad de ejecución del código desde el primer lanzamiento y brindan mejoras de rendimiento para cada instalación y actualización de la app.
  4. Adopta los perfiles de inicio para mejorar el diseño de Dex. El sistema de compilación usa los perfiles de inicio para optimizar aún más las clases y los métodos que contienen, ya que mejora el diseño del código en los archivos DEX del APK.
  5. Actualiza a la versión más reciente de Jetpack Compose

Paso 2: Realiza la evaluación dinámica

Una vez que hayas aplicado las victorias fáciles estáticas, usa la evaluación dinámica para validar las mejoras en un dispositivo real. Primero, puedes hacerlo de forma manual con un dispositivo físico y un cronómetro.

Navega a la sección Puntuación dinámica de la página del marcador y haz lo siguiente:

  1. Configura tu entorno de pruebas con un dispositivo físico. Considera usar un dispositivo de gama baja para exagerar los problemas de rendimiento y que sean más fáciles de detectar.
  2. Mide el tiempo de inicio desde el selector. Inicia tu app en frío desde el ícono del selector y mide el tiempo hasta que sea interactiva.
  3. Medir el tiempo de inicio de la app desde una notificación, con el objetivo de reducirlo a menos de un par de segundos
  4. Mide el rendimiento de la renderización desplazándote por las animaciones y las pantallas principales.

Una vez que completes estos pasos, recibirás una puntuación entre 1 y 100 para las puntuaciones estáticas y dinámicas, lo que te permitirá comprender el rendimiento de tu app y en qué debes enfocarte.

Nivel 3: Aprovecha los frameworks de pruebas de rendimiento locales

Una vez que comiences a evaluar el rendimiento dinámico, es posible que te resulte demasiado tedioso medir el rendimiento de forma manual. Considera automatizar tus pruebas de rendimiento con frameworks de pruebas de rendimiento, como Macrobenchmarks y UiAutomator.

Macrobenchmark 💚 UiAutomator

Piensa en Macrobenchmark y UiAutomator como dos herramientas que funcionan en conjunto: Macrobenchmark es la herramienta de medición. Es como un cronómetro y un contador de velocidad de fotogramas que se ejecutan fuera de tu app. Se encarga de iniciar la app, registrar métricas (como el tiempo de inicio o los fotogramas descartados) y detener la app. UiAutomator es el usuario robot. La biblioteca te permite escribir código para interactuar con la pantalla del dispositivo. Puede encontrar un ícono, presionar un botón,  desplazarse por una lista y mucho más.

Cómo escribir una prueba

Cuando escribes una prueba, encapsulas tu código de UiAutomator dentro de un bloque de Macrobenchmark.

  1. Define la prueba: Usa @MacrobenchmarkRule
  2. Comienza a medir: Llama a benchmarkRule.measureRepeated.
  3. Controla la IU: Dentro de ese bloque, usa código de UiAutomator para iniciar tu app, buscar elementos de la IU y, luego, interactuar con ellos.

A continuación, se incluye un ejemplo de fragmento de código de cómo se ve una prueba de tirones de desplazamiento en una lista de Compose.

benchmarkRule.measureRepeated(

    // ...

    metrics = listOf(

        FrameTimingMetric(),

    ),

    startupMode = StartupMode.COLD,

    iterations = 10,

) {

    // 1. Launch the app's main activity

    startApp()

    // 2. Find the list using its resource ID and scroll down

    onElement { viewIdResourceName == "$packageName.my_list" }

        .fling(Direction.DOWN)

}

4. Revisa los resultados: Cada ejecución de prueba te proporciona información medida con precisión para brindarte los mejores datos sobre el rendimiento de tu app.

timeToInitialDisplayMs  min  1894.4,   median 2847.4,   max  3355.6


frameOverrunMs          P50 -3.2,  P90  6.2, P95  10.4, P99  119.5

Casos de uso habituales

Macrobenchmark proporciona varias métricas principales listas para usar. StartupTimingMetric te permite medir con precisión el inicio de la app. El FrameTimingMetric te permite comprender el rendimiento de renderización de una app durante la prueba.

Tenemos una guía detallada y completa para usar MacrobenchmarksUiAutomator junto con muestras de código disponibles para que sigas aprendiendo.

Nivel 4: Usa herramientas de análisis de registros, como Perfetto 

Las herramientas de análisis de registros, como Perfetto, se usan cuando necesitas ver más allá del código de tu propia aplicación. A diferencia de los depuradores o los analizadores de rendimiento estándar que solo ven tu proceso, Perfetto captura todo el estado del dispositivo (programación del kernel, frecuencia de la CPU, otros procesos y servicios del sistema), lo que te brinda un contexto completo para los problemas de rendimiento.

Consulta nuestra playlist de YouTube sobre la depuración del rendimiento para ver instrucciones en video sobre la depuración del rendimiento con registros del sistema, el generador de perfiles de Android Studio y Perfetto.

Cómo usar Perfetto para depurar el rendimiento

El flujo de trabajo general para depurar el rendimiento con herramientas de análisis de registros es registrar, cargar y analizar el registro. 

Paso 1: Registra un seguimiento

Puedes registrar un registro del sistema con varios métodos: 

Paso 2: Carga el registro

Una vez que tengas el archivo de registro, debes cargarlo en la herramienta de análisis.

  1. Abre Chrome y navega a ui.perfetto.dev.
  2. Arrastra y suelta tu archivo .perfetto-trace (o .pftrace) directamente en la ventana del navegador.
  3. La IU procesará el archivo y mostrará la línea de tiempo.

Paso 3: Analiza el registro

Puedes usar la IU de Perfetto o el generador de perfiles de Android Studio para investigar problemas de rendimiento. Mira este episodio de la serie MAD Skills sobre rendimiento, en el que nuestra ingeniera de rendimiento Carmen Jackson analiza el visualizador de registros de Perfetto.

Situaciones para inspeccionar registros del sistema con Perfetto

Perfetto es una herramienta para expertos que puede proporcionar información sobre todo lo que sucedió en el dispositivo Android mientras se capturaba un registro. Esto es especialmente útil cuando no puedes identificar la causa raíz de una ralentización con los registros estándar o los analizadores básicos.

Cómo depurar el Jank (fotogramas descartados)

Si tu app se traba mientras se desplaza, Perfetto puede mostrarte exactamente por qué un fotograma específico no cumplió con su plazo.

Si se debe a la app, es posible que veas que el subproceso principal se ejecuta durante un período prolongado realizando un análisis pesado, lo que indica situaciones en las que debes trasladar el trabajo al procesamiento asíncrono.

Si se debe al sistema, es posible que veas que tu subproceso principal está listo para ejecutarse, pero el programador del kernel de la CPU le dio prioridad a otro servicio del sistema, lo que hace que tu app espere (contención de la CPU). Esto indica situaciones en las que es posible que debas optimizar el uso de las APIs de la plataforma.

Cómo analizar el inicio lento de la app

El inicio es complejo, ya que implica la inicialización del sistema, la bifurcación de procesos y la carga de recursos. Perfetto visualiza este cronograma con precisión.

Puedes ver si estás esperando llamadas de Binder (comunicación entre procesos). Si tu onCreate espera mucho tiempo una respuesta del sistema PackageManager, Perfetto mostrará claramente ese estado de bloqueo. 

También puedes ver si tu app está haciendo más trabajo del necesario durante el inicio. Por ejemplo, si creas y dispones más vistas de las que la app necesita mostrar, puedes ver estas operaciones en el registro.

Investigación sobre el agotamiento de la batería y el uso de la CPU

Como Perfetto ve todo el sistema, es perfecto para encontrar el consumo de energía invisible.

Puedes identificar qué procesos mantienen bloqueos de activación, lo que impide que el dispositivo entre en modo de suspensión en los registros de "Estado del dispositivo". Obtén más información en nuestra entrada de blog sobre los bloqueos de activación. Además, usa Perfetto para ver si tus trabajos en segundo plano se ejecutan con demasiada frecuencia o activan la CPU de forma innecesaria.

Nivel 5: Crea tu propio framework de seguimiento del rendimiento

El nivel final es para las apps que tienen equipos con recursos para mantener un marco de seguimiento del rendimiento. 

Crear un framework de seguimiento del rendimiento personalizado en Android implica aprovechar varias APIs del sistema para capturar datos durante todo el ciclo de vida de la aplicación, desde el inicio hasta la salida, y durante situaciones específicas de carga alta.

Con ApplicationStartInfoProfilingManagerApplicationExitInfo, puedes crear un sistema de telemetría sólido que informe cómo se inició tu app, información detallada sobre lo que hizo mientras se ejecutaba y por qué dejó de funcionar.

ApplicationStartInfo: Seguimiento de cómo se inició la app

Disponible a partir de Android 15 (API 35), ApplicationStartInfo proporciona métricas detalladas sobre el inicio de la app en el campo. Los datos incluyen si fue un inicio en frío, en caliente o intermedio, y la duración de las diferentes fases de inicio. 

Esto te ayuda a desarrollar una métrica de inicio de referencia con datos de producción para optimizar aún más lo que podría ser difícil de reproducir de forma local. Puedes usar estas métricas para ejecutar pruebas A/B que optimicen el flujo de inicio.

El objetivo es registrar con precisión las métricas de inicio sin instrumentar manualmente cada fase de inicialización.

Puedes consultar estos datos de forma diferida algún tiempo después del inicio de la aplicación.

ProfilingManager: Captura por qué fue lento

ProfilingManager (API 35) permite que tu app active de forma programática registros del sistema en los dispositivos de los usuarios. Esto es útil para detectar problemas de rendimiento transitorios en producción que no puedes reproducir de forma local.

El objetivo es registrar automáticamente un seguimiento cuando se detecta que un recorrido crítico del usuario específico se ejecuta con lentitud o experimenta problemas de rendimiento.

Puedes registrar un objeto de escucha que se active cuando se cumplan condiciones específicas o activarlo de forma manual cuando detectes un problema de rendimiento, como tirones, uso excesivo de memoria o agotamiento de la batería.

Consulta nuestra documentación sobre cómo capturar un perfilrecuperar y analizar datos de generación de perfiles y usar comandos de depuración.

ApplicationExitInfo: Seguimiento del motivo por el que se cerró la app

ApplicationExitInfo (API 30) te indica por qué finalizó tu proceso anterior. Esto es fundamental para encontrar fallas nativas, errores de ANR o cierres del sistema debido a un uso excesivo de la memoria (OOM). También podrás obtener un registro detallado de la lápida con la API getTraceInputStream.

El objetivo de la API es comprender los problemas de estabilidad que no activan los informes de fallas estándar de Java (como Low Memory Kills).

Debes activar esta API en el próximo inicio de la app.

Próximos pasos

Mejorar el rendimiento de Android es un proceso paso a paso. Nos entusiasma ver cómo mejorarás tu rendimiento con estas herramientas.

Sintoniza Ask Android mañana

Redujiste tu app con R8 y optimizaste tu tiempo de ejecución con la optimización guiada por perfil. Y mide el rendimiento de tu app.

Acompáñanos mañana a la sesión en vivo de Pregúntale a Android. Haz tus preguntas ahora con #AskAndroid y obtén respuestas de los expertos.

Escrito por:

Seguir leyendo