Guía de niveles para tu proceso de rendimiento
Te damos la bienvenida al cuarto día de la Semana de Performance Spotlight. Ahora que has descubierto algunas de las fantásticas herramientas y prácticas recomendadas que hemos presentado recientemente, como el optimizador R8 y la optimización guiada por perfil con perfiles de línea de base y perfiles de inicio, puede que te preguntes por dónde empezar a mejorar el rendimiento.
Hemos creado una guía paso a paso para mejorar el rendimiento que se adapta a las necesidades de tu equipo de desarrollo para móviles, tanto si tienes una aplicación con un solo desarrollador que quiere empezar a mejorar el rendimiento como si tienes un equipo entero dedicado a mejorar el rendimiento de Android.
La guía de nivelación del rendimiento incluye 5 niveles. Empezaremos con el nivel 1, que incluye herramientas de rendimiento que requieren un esfuerzo mínimo de adopción, y llegaremos hasta el nivel 5, ideal para aplicaciones que tienen los recursos necesarios para mantener un marco de rendimiento personalizado.
Puedes ir directamente al nivel que más te interese:
- Nivel 1: Usar la monitorización de campos proporcionada por Play Console
- Nivel 2: Sigue las tareas de la puntuación de rendimiento de la aplicación
- Nivel 3: Aprovechar los frameworks de pruebas de rendimiento locales
- Nivel 4: Usar herramientas de análisis de rastreo como Perfetto
- Nivel 5: Crea tu propio marco de seguimiento del rendimiento
Nivel 1: usar la monitorización de campos proporcionada por Play Console
Te recomendamos que primero aproveches Android vitals en Play Console para ver los datos de monitorización de campo recogidos automáticamente, lo que te proporcionará estadísticas sobre tu aplicación con un esfuerzo mínimo.
Android vitals es una iniciativa de Google para recoger y mostrar automáticamente estos datos de campo.
A continuación, te explicamos cómo proporcionamos estos datos:
- Recoger datos: cuando un usuario habilita esta opción, su dispositivo Android registra automáticamente eventos clave de rendimiento y estabilidad de todas las aplicaciones, incluida la tuya.
- Datos agregados: Google Play recoge y anonimiza estos datos de los usuarios de tu aplicación.
- Estadísticas de superficie: los datos se muestran en el panel de control de Android vitals de Google Play Console.
El panel de control de Android vitals monitoriza muchas métricas, pero algunas se han designado como Métricas principales. Estas métricas son las más importantes, ya que pueden afectar a la visibilidad y al posicionamiento de tu aplicación en Google Play Store.
Android vitals prioritarios
MÉTRICAS TÉCNICAS PRINCIPALES DE CALIDAD DE GOOGLE PLAY Para maximizar la visibilidad en Google Play, mantén tu aplicación por debajo de los umbrales de mal comportamiento de estas métricas. | |
| Tasa de fallos percibidos por los usuarios | El porcentaje de usuarios activos al día que han experimentado al menos un fallo que es probable que hayan notado |
| Tasa de errores ANR percibidos por los usuarios | El porcentaje de usuarios activos al día que han experimentado al menos un error ANR que es probable que hayan notado |
| Uso excesivo de batería | El porcentaje de sesiones de esfera de reloj en las que el uso de batería supera el 4,44% por hora. |
| Novedad: Wake locks parciales excesivos | El porcentaje de sesiones de usuario en las que el uso acumulado de wake locks no exentos supera las 2 horas. |
Los Android vitals prioritarios incluyen la tasa de fallos percibida por los usuarios, la tasa de errores ANR, el uso excesivo de batería y la nueva métrica de wake locks parciales excesivos.
Tasa de errores ANR percibidos por los usuarios
Puedes usar el panel de control de errores ANR de Android vitals para ver los rastreos de pila de los problemas que se producen en el campo y obtener estadísticas y recomendaciones sobre cómo solucionarlos.
Puedes desglosar un error ANR específico para ver el rastreo de la pila, así como información valiosa sobre la posible causa del problema.
Además, consulta nuestra guía sobre errores ANR para diagnosticar y solucionar los casos habituales en los que pueden producirse errores ANR.
Tasa de fallos percibidos por los usuarios
Usa el panel de control de fallos de Android vitals para depurar los fallos y ver una muestra de los rastreos de la pila que se producen en tu aplicación.
En nuestra documentación también se ofrecen directrices para solucionar problemas específicos. Por ejemplo, en la guía para solucionar problemas de servicios en primer plano se explica cómo identificar y corregir situaciones habituales en las que se producen fallos.
Uso excesivo de la batería
Para reducir las sesiones de esferas de reloj con un uso excesivo de batería en Wear OS, consulta la guía de Wear sobre cómo mejorar y ahorrar batería.
[Nuevo] Wake locks parciales excesivos
Hace poco anunciamos que las aplicaciones que superen el umbral de wake locks parciales excesivos podrían recibir un tratamiento adicional a partir del 1 de marzo del 2026.
En el caso de los dispositivos móviles, la métrica de Android vitals se aplica a los wake locks no exentos adquiridos mientras la pantalla está apagada y la aplicación se está ejecutando en segundo plano o está ejecutando un servicio en primer plano. Android vitals considera que el uso de wake locks parciales es excesivo si se mantienen durante al menos dos horas en un periodo de 24 horas y afecta a más del 5% de las sesiones de tu aplicación, de media durante 28 días.
Para depurar y solucionar problemas de wake lock excesivo, consulta nuestra entrada de blog técnica.
Consulta nuestra documentación de Android vitals para seguir aprovechando al máximo esta función.
Nivel 2: Sigue las tareas de la puntuación de rendimiento de la aplicación
A continuación, usa la puntuación de rendimiento de la aplicación para encontrar las acciones que te permitirán mejorar el rendimiento de tu aplicación.
La puntuación de rendimiento de aplicaciones Android es un marco de trabajo estandarizado para medir el rendimiento técnico de tu aplicación. Se le asigna una puntuación entre 0 y 100, donde un número más bajo indica que hay más margen de mejora.
Para conseguir resultados fácilmente, primero debes empezar por la puntuación de rendimiento estática. A menudo, se trata de cambios en la configuración o de actualizaciones de herramientas que proporcionan mejoras significativas del rendimiento.
Paso 1: Realiza la evaluación estática
La evaluación estática analiza la configuración de tu proyecto y la adopción de herramientas. Suelen ser las formas más rápidas de mejorar el rendimiento.
Ve a la sección Puntuación estática de la página de la tabla de clasificaciones y haz lo siguiente:
- Evalúa la versión del complemento de Android para Gradle (AGP).
- Adopta la minificación de R8 de forma gradual o, lo ideal, usa R8 en modo completo para minificar y optimizar el código de la aplicación.
- Adopta los perfiles de línea de base, que mejoran la velocidad de ejecución del código desde el primer lanzamiento y ofrecen mejoras de rendimiento en cada nueva descarga y actualización de la aplicación.
- Adopta 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, mejorando el diseño del código en los archivos DEX de tu APK.
- Actualizar a la versión más reciente de Jetpack Compose
Paso 2: Realiza la evaluación dinámica
Una vez que hayas aplicado las optimizaciones estáticas, usa la evaluación dinámica para validar las mejoras en un dispositivo real. Puedes hacerlo manualmente con un dispositivo físico y un cronómetro.
Ve a la sección Puntuación dinámica de la página de la tabla de clasificaciones y haz lo siguiente:
- Configura tu entorno de pruebas con un dispositivo físico. Te recomendamos que uses un dispositivo de gama baja para exagerar los problemas de rendimiento y que sea más fácil detectarlos.
- Mide el tiempo de inicio desde el menú de aplicaciones. Inicia tu aplicación con arranque en frío desde el icono del launcher y mide el tiempo que tarda en ser interactiva.
- Mide el tiempo de inicio de la aplicación desde una notificación con el objetivo de reducirlo a menos de un par de segundos.
- Mide el rendimiento del renderizado desplazándote por las pantallas y animaciones principales.
Una vez que hayas completado estos pasos, recibirás una puntuación entre 1 y 100 para las puntuaciones estática y dinámica, lo que te permitirá conocer el rendimiento de tu aplicación y saber en qué debes centrarte.
Nivel 3: Aprovechar los frameworks de pruebas de rendimiento locales
Una vez que hayas empezado a evaluar el rendimiento dinámico, puede que te resulte demasiado tedioso medirlo manualmente. Te recomendamos que automatices las 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 juntas: Macrobenchmark es la herramienta de medición. Es como un cronómetro y un contador de fotogramas por segundo que se ejecuta fuera de tu aplicación. Se encarga de iniciar tu aplicación, registrar métricas (como el tiempo de inicio o los fotogramas perdidos) y detener la aplicación. UiAutomator es el usuario robot. La biblioteca te permite escribir código para interactuar con la pantalla del dispositivo. Puede encontrar un icono, tocar un botón, desplazarse por una lista y más.
Cómo escribir una prueba
Cuando escribes una prueba, incluyes el código de UiAutomator en un bloque Macrobenchmark.
- Define la prueba: usa la
@MacrobenchmarkRule. - Empezar a medir: llama al
benchmarkRule.measureRepeated. - Controlar la interfaz de usuario: dentro de ese bloque, usa el código de UiAutomator para iniciar tu aplicación, buscar elementos de la interfaz de usuario e interactuar con ellos.
Aquí tienes un fragmento de código de ejemplo de cómo se prueba una lista de Compose para detectar problemas de rendimiento al desplazarse.
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 prueba te proporciona información medida con precisión para que obtengas los mejores datos sobre el rendimiento de tu aplicación.
timeToInitialDisplayMs min 1894.4, median 2847.4, max 3355.6 frameOverrunMs P50 -3.2, P90 6.2, P95 10.4, P99 119.5
Casos prácticos habituales
Macrobenchmark proporciona varias métricas principales de forma predeterminada. StartupTimingMetric te permite medir con precisión el inicio de la aplicación. La opción FrameTimingMetric te permite conocer el rendimiento de renderización de una aplicación durante la prueba.
Tenemos una guía detallada y completa sobre cómo usar Macrobenchmarks y UiAutomator junto con ejemplos de código para que sigas aprendiendo.
Nivel 4: Usar herramientas de análisis de rastreo como Perfetto
Las herramientas de análisis de trazas, como Perfetto, se usan cuando necesitas ver más allá del código de aplicación. A diferencia de los depuradores o los generadores de perfiles 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 proporciona el contexto completo de los problemas de rendimiento.
Consulta nuestra lista de reproducción de depuración del rendimiento de YouTube para ver instrucciones en vídeo sobre cómo depurar el rendimiento con rastreos del sistema, Android Studio Profiler 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 trazas consiste en registrar, cargar y analizar la traza.
Paso 1: Registra un rastreo
Puedes grabar un registro del sistema de varias formas:
- Registrar un rastreo manualmente en el dispositivo directamente desde las opciones de desarrollador.
- Usar el Perfilador de CPU de Android Studio
- Usar la interfaz de usuario de Perfetto
Paso 2: Carga el rastreo
Una vez que tengas el archivo de seguimiento, debes cargarlo en la herramienta de análisis.
- Abre Chrome y ve a ui.perfetto.dev.
- Arrastra y suelta el archivo
.perfetto-trace(o.pftrace) directamente en la ventana del navegador. - La interfaz de usuario procesará el archivo y mostrará la línea de tiempo.
Paso 3: Analiza el rastreo
Puedes usar la interfaz de usuario de Perfetto o el Profiler de Android Studio para investigar problemas de rendimiento. Echa un vistazo a este episodio de la serie MAD Skills sobre rendimiento, en el que nuestra ingeniera de rendimiento Carmen Jackson habla sobre el visor de trazas de Perfetto.
Casos prácticos para inspeccionar los rastros del sistema con Perfetto
Perfetto es una herramienta para expertos que puede proporcionar información sobre todo lo que ha ocurrido en el dispositivo Android mientras se capturaba un registro. Esto resulta especialmente útil cuando no puedes identificar la causa principal de una ralentización mediante registros estándar o generadores de perfiles básicos.
Depurar el jank (fotogramas perdidos)
Si tu aplicación se bloquea al desplazarse, Perfetto puede mostrarte exactamente por qué un marco específico no ha cumplido el plazo.
Si se debe a la aplicación, es posible que veas que el subproceso principal se ejecuta durante mucho tiempo realizando un análisis pesado. Esto indica situaciones en las que deberías mover el trabajo a un procesamiento asíncrono.
Si se debe al sistema, es posible que veas que tu hilo principal está listo para ejecutarse, pero el programador del kernel de la CPU ha dado prioridad a otro servicio del sistema, lo que hace que tu aplicación tenga que esperar (contención de la CPU). Esto indica situaciones en las que puede que tengas que optimizar el uso de las APIs de la plataforma.
Analizar el inicio lento de una aplicación
El inicio es un proceso complejo que implica la inicialización del sistema, la bifurcación de procesos y la carga de recursos. Perfetto visualiza esta cronología con precisión.
Puedes ver si estás esperando llamadas de Binder (comunicación entre procesos). Si tu onCreate espera mucho tiempo para recibir una respuesta del sistema PackageManager, Perfetto mostrará claramente ese estado de bloqueo.
También puedes ver si tu aplicación está haciendo más trabajo del necesario durante el inicio. Por ejemplo, si creas y colocas más vistas de las que necesita mostrar la aplicación, puedes ver estas operaciones en el registro.
Investigar el consumo de batería y el uso de la CPU
Como Perfetto ve todo el sistema, es perfecto para encontrar consumos de energía invisibles.
Puedes identificar qué procesos están manteniendo los wake locks, lo que impide que el dispositivo entre en suspensión, en las pistas de "Estado del dispositivo". Consulta más información en esta entrada de blog sobre los bloqueos de activación. También puedes usar Perfetto para ver si tus tareas en segundo plano se ejecutan con demasiada frecuencia o activan la CPU innecesariamente.
Nivel 5: Crea tu propio marco de seguimiento del rendimiento
El nivel final es para las aplicaciones que tienen equipos con recursos para mantener un marco de seguimiento del rendimiento.
Para crear un framework de seguimiento del rendimiento personalizado en Android, se deben usar varias APIs del sistema para recoger datos a lo largo del ciclo de vida de la aplicación, desde el inicio hasta el cierre, y durante situaciones específicas de carga elevada.
Si usas ApplicationStartInfo, ProfilingManager y ApplicationExitInfo, puedes crear un sistema de telemetría sólido que informe sobre cómo se ha iniciado tu aplicación, información detallada sobre lo que ha hecho mientras se ejecutaba y por qué ha fallado.
ApplicationStartInfo: seguimiento de cómo se ha iniciado la aplicación
Disponible a partir de Android 15 (API 35), ApplicationStartInfo proporciona métricas detalladas sobre el inicio de la aplicación en el campo. Los datos incluyen si se trataba de un arranque en frío, en caliente o en tibio, así como 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 optimizarla aún más, lo que puede ser difícil de reproducir de forma local. Puedes usar estas métricas para hacer pruebas A/B y optimizar el flujo de inicio.
El objetivo es registrar con precisión las métricas de lanzamiento 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é era lento
ProfilingManager (API 35) permite que tu aplicación active de forma programática los rastreos del sistema en los dispositivos de los usuarios. Esta función es muy útil para detectar problemas de rendimiento transitorios en el entorno de producción que no puedes reproducir localmente.
El objetivo es registrar automáticamente una traza cuando se detecte que un recorrido de usuario específico de alta importancia crítica se ejecuta lentamente o tiene problemas de rendimiento.
Puedes registrar un listener que se active cuando se cumplan condiciones específicas o activarlo manualmente cuando detectes un problema de rendimiento, como un parpadeo, un uso excesivo de memoria o un consumo excesivo de batería.
Consulta nuestra documentación sobre cómo capturar un perfil, recuperar y analizar datos de perfil y usar comandos de depuración.
ApplicationExitInfo: seguimiento de los motivos por los que se ha cerrado la aplicación
ApplicationExitInfo (API 30) te indica por qué ha finalizado tu proceso anterior. Esto es fundamental para encontrar fallos nativos, errores ANR o cierres del sistema debido a un uso excesivo de memoria (OOM). También podrás obtener un rastreo detallado de la lápida mediante la API getTraceInputStream.
El objetivo de la API es detectar problemas de estabilidad que no activan los informes de fallos estándar de Java (como los errores por falta de memoria).
Debes activar esta API en el próximo inicio de la aplicación.
Pasos siguientes
Mejorar el rendimiento de Android es un proceso que se lleva a cabo paso a paso. Estamos deseando ver cómo mejoras tu rendimiento con estas herramientas.
No te pierdas mañana el programa Ask Android
Has reducido el tamaño de tu aplicación con R8 y has optimizado su tiempo de ejecución con la optimización guiada por perfil. Y mide el rendimiento de tu aplicación.
Únete a nosotros mañana en la sesión en directo Pregunta a Android. Envía tus preguntas ahora con el hashtag #AskAndroid y los expertos te responderán.
Seguir leyendo
-
Instrucciones
Google es consciente de que el consumo excesivo de batería es una de las principales preocupaciones de los usuarios de Android, por lo que ha tomado medidas importantes para ayudar a los desarrolladores a crear aplicaciones más eficientes.
Alice Yuan • Lectura de 8 minutos
-
Instrucciones
Queríamos mostrarte ejemplos de funciones basadas en IA que usan modelos en el dispositivo y en la nube, así como inspirarte para que crees experiencias atractivas para tus usuarios.
Thomas Ezan, Ivy Knight • Tiempo de lectura: 2 min
-
Instrucciones
Hablaremos sobre la optimización guiada por perfil, las mejoras de rendimiento de Jetpack Compose y las consideraciones sobre el trabajo detrás de las cámaras.
Ben Weiss, Breana Tate, Jossi Wolf • Lectura de 8 minutos
Mantente al día
Recibe cada semana en tu bandeja de entrada las últimas novedades sobre el desarrollo para Android.