Novedades de productos
Optimiza la batería de tu app con la métrica de bloqueo de activación de Android vitals
Lectura de 7 min
La duración de la batería es un aspecto fundamental de la experiencia del usuario, y los bloqueos de activación desempeñan un papel importante. ¿Los usas de forma excesiva? En esta entrada de blog, exploraremos qué son los bloqueos de activación, cuáles son algunas prácticas recomendadas para usarlos y cómo puedes comprender mejor el comportamiento de tu propia app con la métrica de Play Console.
Uso excesivo de bloqueos de activación parciales en Android vitals
Play Console ahora supervisa el agotamiento de la batería, con un enfoque en el uso excesivo de bloqueos de activación parciales, como un indicador clave de rendimiento.
Esta función aumenta la importancia de la eficiencia de la batería junto con los indicadores de estabilidad de métricas esenciales existentes: fallas y ANR excesivas percibidas por el usuario. Hemos definido un umbral de comportamiento inadecuado para los bloqueos de activación excesivos. A partir del 1 de marzo de 2026, si tu título no cumple con este umbral de calidad, es posible que lo excluyamos de las superficies de descubrimiento destacadas, como las recomendaciones. En algunos casos, es posible que mostremos una advertencia en la ficha de Play Store para indicar a los usuarios que tu app puede causar un agotamiento excesivo de la batería.
Advertencia de bloqueo de activación excesivo en la descripción general de Android vitals.
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 ejecuta un servicio en primer plano. Android vitals considera que el uso de bloqueos de activación parciales es excesivo en los siguientes casos:
- Los bloqueos de activación se mantienen durante al menos dos horas en un período de las 24 horas.
- Afecta a más del 5% de las sesiones de tu app, en promedio durante 28 días.
Los bloqueos de activación creados por las APIs iniciadas por el usuario de audio, ubicación y JobScheduler están exentos del cálculo de bloqueos de activación.
Información sobre los bloqueos de activación
Un bloqueo de activación es un mecanismo que permite que una app mantenga la CPU de un dispositivo en funcionamiento incluso cuando el usuario no interactúa activamente con ella.
Un bloqueo de activación parcial mantiene la CPU en funcionamiento incluso si la pantalla está apagada, lo que impide que la CPU ingrese a un estado de "suspensión" de bajo consumo. Un bloqueo de activación completo mantiene en funcionamiento la pantalla y la CPU.
Existen 2 métodos para adquirir bloqueos de activación parciales:
- La app adquiere y libera manualmente el bloqueo de activación con las APIs de PowerManager para un caso de uso específico. Por lo general, esto se adquiere junto con un servicio en primer plano, una API de ciclo de vida de la plataforma diseñada para una operación perceptible por el usuario.
- Como alternativa, otra API adquiere el bloqueo de activación y se atribuye a la app debido al uso de la API. Puedes obtener más información sobre esto en la sección de prácticas recomendadas.
Si bien los bloqueos de activación son necesarios para tareas como completar una descarga iniciada por el usuario de un archivo grande, su uso excesivo o inadecuado puede provocar un agotamiento significativo de la batería. Vimos casos en los que las apps mantienen bloqueos de activación durante horas o no los liberan correctamente, lo que genera quejas de los usuarios sobre el agotamiento significativo de la batería, incluso cuando no interactúan con la app.
Prácticas recomendadas para el uso de bloqueos de activación
Antes de analizar cómo depurar el uso excesivo de bloqueos de activación, asegúrate de seguir las prácticas recomendadas para los bloqueos de activación.
Considera estas cuatro preguntas fundamentales.
1. ¿Consideraste opciones alternativas de bloqueo de activación?
Antes de considerar la adquisición de un bloqueo de activación parcial manual, sigue este diagrama de flujo de toma de decisiones:
Diagrama de flujo para decidir cuándo adquirir manualmente un bloqueo de activación
-
¿Es necesario que la pantalla permanezca encendida?
- Sí: Consulta la documentación de Keep Screen On.
-
¿La aplicación ejecuta un servicio en primer plano?
- No: No es necesario adquirir manualmente un bloqueo de activación.
-
¿Es perjudicial para la experiencia del usuario si el dispositivo se suspende?
- No: Por ejemplo, actualizar una notificación después de que se active el dispositivo no requiere un bloqueo de activación.
- Sí: Si es fundamental evitar que el dispositivo se suspenda, como la comunicación continua con un dispositivo externo, continúa.
-
¿Ya hay una API que mantiene el dispositivo activo en tu nombre?
- Puedes aprovechar la documentación Identificar bloqueos de activación creados por otras APIs para identificar situaciones en las que otras APIs, como LocationManager, crean bloqueos de activación.
- Si no existen APIs, continúa con la pregunta final.
- Si respondiste todas estas preguntas y determinaste que no existe una alternativa, debes continuar con la adquisición manual de un bloqueo de activación.
2. ¿Le asignaste el nombre correcto al bloqueo de activación?
Cuando adquieres bloqueos de activación de forma manual, es importante asignarles nombres adecuados para la depuración:
-
No incluyas información de identificación personal (PII) en el nombre, como direcciones de correo electrónico. Si se detecta PII, el bloqueo de activación se registra como
_UNKNOWN, lo que dificulta la depuración. - No le asignes un nombre al bloqueo de activación de forma programática con nombres de clase o de método, ya que ProGuard y otras herramientas pueden ofuscarlos. En su lugar, usa una cadena codificada.
- No agregues contadores ni identificadores únicos a las etiquetas de bloqueo de activación. Se debe usar la misma etiqueta cada vez que se ejecute el bloqueo de activación para permitir que el sistema agregue el uso por nombre, lo que facilita la detección de comportamientos anormales.
3. ¿Siempre se libera el bloqueo de activación adquirido?
Si adquieres un bloqueo de activación de forma manual, asegúrate de que siempre se ejecute la liberación del bloqueo de activación. Si no liberas un bloqueo de activación, se puede producir un agotamiento significativo de la batería.
Por ejemplo, si se arroja una excepción no detectada durante processingWork(), es posible que nunca se realice la llamada a release(). En su lugar, puedes usar un bloque try-finally para garantizar que se libere el bloqueo de activación, incluso si se produce una excepción.
Además, puedes agregar un tiempo de espera al bloqueo de activación para asegurarte de que se libere después de un período específico, lo que evita que se mantenga de forma indefinida.
fun processingWork() {
wakeLock.apply {
try {
acquire(60 * 10 * 1000) // timeout after 10 minutes
doTheWork()
} finally {
release()
}
}
}
4. ¿Puedes reducir la frecuencia de activación?
Para las solicitudes de datos periódicas, reducir la frecuencia con la que tu app activa el dispositivo es clave para la optimización de batería. Algunos ejemplos para reducir la frecuencia de activación incluyen los siguientes:
- WorkManager: Aumenta el intervalo periódico en PeriodicWorkRequests.
- SensorManager: Aprovecha el procesamiento por lotes especificando maxReportLatencyMs cuando registres el objeto de escucha.
-
Proveedor de ubicación combinada:
- Reduce la frecuencia de recuperación de la ubicación con getLastLocation para obtener la ubicación almacenada en caché más reciente.
- Usa setPriority(PRIORITY_PASSIVE) para un método de actualización que consuma menos batería.
- Además, puedes aprovechar el mecanismo de procesamiento por lotes de ubicación si estableces un intervalo de actualización mínimo con setMinUpdateIntervalMillis.
Puedes ver más detalles en la documentación de prácticas recomendadas para los bloqueos de activación.
Cómo depurar el uso excesivo de bloqueos de activación
Incluso con las mejores intenciones, puede ocurrir un uso excesivo de bloqueos de activación. Si tu app está marcada en Play Console, puedes depurarla de la siguiente manera:
Identificación inicial con Play Console
El panel de Android vitals de bloqueos de activación parciales excesivos proporciona desgloses de los nombres de los bloqueos de activación no exentos asociados con tu app, y muestra las sesiones y las duraciones afectadas. Recuerda usar la documentación para ayudarte a identificar si el nombre del bloqueo de activación lo mantiene la app o lo mantiene otra API.
El panel de Android vitals de bloqueos de activación parciales excesivos se desplazó hacia abajo hasta la sección de desgloses para ver las etiquetas de bloqueos de activación excesivos.
Cómo depurar los bloqueos de activación excesivos que mantienen los trabajadores o los trabajos
Puedes identificar los bloqueos de activación que mantienen los trabajadores con este nombre de bloqueo de activación:
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
La lista completa de variaciones de los nombres de los bloqueos de activación que mantienen los trabajadores está disponible en la documentación. Para depurar estos bloqueos de activación, puedes usar el Inspector de tareas en segundo plano para depurar de forma local o aprovechar getStopReason para depurar problemas en el campo.
Inspector de tareas en segundo plano de Android Studio
Captura de pantalla del Inspector de tareas en segundo plano, en la que se pudo identificar un trabajador "WeatherSyncWorker" que se reintentó y falló con frecuencia.
Para la depuración local de problemas de WorkManager, usa esta herramienta en un emulador o dispositivo conectado (nivel de API 26 o superior). Muestra una lista de trabajadores y sus estados (finalizado, en ejecución, en cola), lo que te permite inspeccionar los detalles y comprender las cadenas de trabajadores.
Por ejemplo, puede revelar si un trabajador falla o se reintenta con frecuencia debido a que alcanza las limitaciones del sistema.
Consulta la documentación del Inspector de tareas en segundo plano para obtener más detalles.
WorkManager getStopReason
Para la depuración en el campo de trabajadores con bloqueos de activación excesivos, usa WorkInfo.getStopReason() en WorkManager 2.9.0 o versiones posteriores, o bien JobParameters.getStopReason() para JobScheduler, disponible en el SDK 31 o versiones posteriores.
Esta API ayuda a registrar el motivo por el que se detuvo un trabajador (p.ej., STOP_REASON_TIMEOUT, STOP_REASON_QUOTA), lo que permite identificar problemas como los tiempos de espera frecuentes debido al agotamiento de la duración del tiempo de ejecución.
backgroundScope.launch {
WorkManager.getInstance(context)
.getWorkInfoByIdFlow(workRequest.id)
.collect { workInfo ->
logStopReason(workRequest.id, workInfo?.stopReason)
}
}
Cómo depurar otros tipos de bloqueos de activación excesivos
Para situaciones más complejas que involucran bloqueos de activación mantenidos manualmente o APIs que mantienen el bloqueo de activación, te recomendamos que uses la recopilación de registros del sistema para depurar.
Recopilación de registros del sistema
Un registro del sistema es una potente herramienta de depuración que captura un registro detallado de la actividad del sistema durante un período, lo que proporciona estadísticas sobre el estado de la CPU, la actividad de los subprocesos, la actividad de la red y las métricas relacionadas con la batería, como la duración del trabajo y el uso de bloqueos de activación.
Puedes capturar un registro del sistema con varios métodos:
- Usa la herramienta de línea de comandos de registro del sistema.
- Usa el Generador de perfiles de CPU de Android Studio.
- Usa la IU de Perfetto.
- Graba un registro de forma manual en el dispositivo directamente desde las opciones para desarrolladores.
Habilita la categoría "power:PowerManagement" de Atrace en la IU de Perfetto en la pestaña Android apps & svcs.
Independientemente del método elegido, es fundamental asegurarse de recopilar la "power:PowerManagement" categoría de Atrace para permitir la visualización de los registros de estado del dispositivo.
Inspección de la IU de Perfetto y análisis de SQL
Los registros del sistema se pueden abrir e inspeccionar en la IU de Perfetto. Cuando abras el registro, verás una visualización de varios procesos en una línea de tiempo. Los registros en los que nos enfocaremos en esta guía son los que se encuentran en "Device State".
Fija los registros en "Device State", como "Top app", "Screen state", "Long Wake locks" y "Jobs", para identificar visualmente los segmentos de bloqueo de activación de larga duración.
Cada bloque muestra el nombre del evento, cuándo comenzó y cuándo terminó. En Perfetto, esto se llama segmento.
Para el análisis escalable de varios registros, puedes usar el análisis de SQL de Perfetto. Una consulta en SQL puede encontrar todos los bloqueos de activación ordenados por duración, lo que ayuda a identificar los principales contribuyentes al uso excesivo.
Este es un ejemplo de consulta que suma todas las etiquetas de bloqueo de activación que se produjeron en el registro del sistema, ordenadas por duración total:
SELECT slice.name as name, track.name as track_name,SUM(dur / 100000) as total_dur_ms FROM slice JOIN track ON slice.track_id = track.id WHERE track.name = 'WakeLocks'GROUP BY slice.name, track.name ORDER BY total_dur_ms DESC
Usa ProfilingManager para la recopilación de registros en el campo
Para problemas difíciles de reproducir, ProfilingManager (agregado en el SDK 35) es una API programática que permite a los desarrolladores recopilar registros del sistema en el campo con activadores de inicio y finalización. Ofrece más control sobre los puntos de activación de inicio y finalización para la recopilación de perfiles y aplica la limitación de frecuencia a nivel del sistema para evitar el impacto en el rendimiento del dispositivo.
Consulta la documentación de ProfilingManager para obtener más información sobre cómo implementar la recopilación de registros del sistema en el campo, lo que incluye cómo capturar un registro de forma programática, analizar datos de generación de perfiles y usar comandos de depuración locales.
Los registros del sistema recopilados con ProfilingManager se verán de forma similar a los recopilados manualmente, pero los procesos del sistema y otros procesos de la app se redactan en el registro.
Conclusión
La métrica de bloqueos de activación parciales excesivos en Android vitals es solo una pequeña parte de nuestro compromiso continuo de ayudar a los desarrolladores a reducir el agotamiento de la batería y mejorar la calidad de las apps.
Si comprendes y aplicas correctamente los bloqueos de activación, puedes optimizar significativamente el rendimiento de la batería de tu app. Aprovechar las APIs alternativas, cumplir con las prácticas recomendadas para los bloqueos de activación y usar potentes herramientas de depuración, como el Inspector de tareas en segundo plano, los registros del sistema y ProfilingManager, son clave para garantizar el éxito de tu app en Google Play.
Seguir leyendo
-
Novedades de productos
Si eres desarrollador de Android y quieres implementar funciones innovadoras de IA en tu app, recientemente lanzamos nuevas y potentes actualizaciones.
Thomas Ezan • Lectura de 3 min
-
Novedades de productos
Android 17 alcanzó la versión beta 4, la última versión beta programada de este ciclo de lanzamiento, un hito fundamental para la compatibilidad de apps y la estabilidad de la plataforma.
Daniel Galpin • Lectura de 4 min
-
Novedades de productos
Aumenta la privacidad del usuario y la protección empresarial con las políticas de Play actualizadas
Hacer de Google Play la experiencia más segura y confiable posible. Hoy, anunciamos un nuevo conjunto de actualizaciones de políticas y una función de transferencia de cuentas para aumentar la privacidad del usuario y proteger tu empresa del fraude.
Bennet Manuel • Lectura de 3 min
Mantente al día
Recibe la información más reciente sobre el desarrollo de Android en tu bandeja de entrada todas las semanas.