Wake locks parciales sostenidos

Los bloqueos de activación parciales son un mecanismo en la API de PowerManager que les permite a los desarrolladores mantener la CPU en ejecución después de que se apaga la pantalla de un dispositivo (ya sea debido al tiempo de espera del sistema o a que el usuario haya presionado el botón de encendido). Para adquirir un bloqueo de activación parcial, tu app debe llamar a acquire() con la marca PARTIAL_WAKE_LOCK. Se vuelve sostenido cuando se mantiene durante un tiempo prolongado mientras se ejecuta tu app en segundo plano (el usuario no puede ver ninguna parte). Esta condición agota la batería del dispositivo, ya que impide que ingrese en el estado de bajo consumo. Debes usar el bloqueo de activación parcial solo cuando sea necesario y liberarlo cuando ya no lo necesites.

Si tu app presenta un bloqueo de activación parcial sostenido, puedes seguir las indicaciones que se incluyen en esta página para diagnosticar el problema y corregirlo.

Cómo detectar el problema

Quizás no siempre estés al tanto de que los bloqueos de activación parciales de tu app son sostenidos. Si ya la publicaste, Android vitals puede ayudarte a que te enteres del problema.

Android vitals

Android vitals puede ayudarte a mejorar el rendimiento de tu app. Para ello, te envía alertas a través de Play Console cuando tu app presenta bloqueos de activación parciales sostenidos. Android vitals los registra como sostenidos cuando se produce, como mínimo, un bloqueo de activación parcial de una hora de duración en una sesión de batería mientras está en segundo plano:

La definición de sesión de batería depende de la versión de la plataforma.

  • En Android 10, una sesión de batería es la agregación de todos los informes de batería que se reciben en un período determinado de 24 horas. Un informe de batería hace referencia al intervalo entre dos cargas de batería, que puede ser desde menos del 20% hasta más del 80%, o desde cualquier nivel de carga hasta el 100%.
  • En Android 11, una sesión de batería es un período fijo de 24 horas.

La cantidad de sesiones de batería que se muestra representa un compilado de todos los usuarios medidos de la app. Para obtener información sobre cómo Google Play recopila datos de Android vitals, consulta la documentación de Play Console.

Una vez que se te informa que tu app presenta demasiados bloqueos de activación parciales sostenidos, el siguiente paso es abordar el problema.

Cómo corregir el problema

Debido a que los bloqueos de activación pueden agotar la batería del dispositivo, no debes usarlos si hay una alternativa. La documentación Elige la API correcta para mantener el dispositivo activo puede ayudarte a encontrar la mejor solución para tu app.

Si necesitas usar un bloqueo de activación, sigue las prácticas recomendadas de bloqueo de activación para asegurarte de que no afecten la eficiencia del dispositivo. En particular, asegúrate de que todos los dispositivos que adquieras estén liberados y libera el bloqueo lo antes posible.

Una vez que hayas corregido el problema en el código, verifica que tu app libere los bloqueos de activación correctamente con las siguientes herramientas:

  • dumpsys: Es una herramienta que proporciona información sobre el estado de los servicios del sistema en un dispositivo. Para ver el estado del servicio de batería, que incluye una lista de los bloqueos de activación, ejecuta adb shell dumpsys power.

  • Battery Historian: Es una herramienta que analiza los resultados de un informe de errores de Android y genera una representación visual de los eventos relacionados con la batería.