¿Cómo puedo saber que estoy afectado?
Esta es probablemente la primera pregunta para quienes no están familiarizados con este tema. Con Gingerbread (Android 2.3) y superior, tienes un servicio a bordo que te ayuda a descubrir: estadísticas de la batería. Aunque los fabricantes tienden a colocarlo en diferentes puntos, se encuentra principalmente en Configuración → Acerca del teléfono → Batería o similar, y muestra una lista de las aplicaciones que han utilizado la mayor parte de su batería. Además de eso hay un pequeño gráfico. Toca eso y te llevará a una pantalla similar a esta:
Captura de pantalla de estadísticas de batería en Android 2.3
Elegí una captura de pantalla de uno de mis dispositivos que ilustra el problema. Mirando las dos barras azules inferiores ("Aktiv" = El dispositivo se mantuvo despierto (activo), "Bildschirm an" = "Pantalla encendida"), la barra azul más a la derecha en "Aktiv" indica un WakeLock: El dispositivo se mantuvo ocupado a pesar de El hecho de que la pantalla estaba apagada. Entonces con esto podemos estar bastante seguros de que tenemos un WakeLock, pero no podemos decir quién lo causó.
Si su dispositivo no ofrece esta pantalla (o las barras en la parte inferior: acabo de descubrir, por ejemplo, el LG Optimus 4X que ejecuta Android 4.0.3 ha cortado estas barras), puede encontrarlas, por ejemplo, usando GSam Battery Monitor :
Información similar de GSam Battery Monitor : aquí las "barras azules" mencionadas son amarillas / naranjas
¿Qué causó el WakeLock?
Desafortunadamente, esta pregunta no se puede responder usando aplicaciones preinstaladas (excepto, tal vez, algunas ROM personalizadas). Pero hay herramientas disponibles que pueden. El candidato más conocido para esto es BetterBatteryStats , y nos muestra la causa en su sección parcial de wakelocks :
Capturas de pantalla de BetterBatteryStats
En el primer ejemplo 2 (tomado de la página de la tienda de juegos de la aplicación), el evento que causó la mayoría de los WakeLocks fue el deseado: no queremos que la reproducción se detenga mientras se escucha música. Por lo tanto, el segundo ejemplo 3 (tomado de un caso real en uno de mis dispositivos) podría ser mejor: los 3 eventos más importantes son causados por la misma aplicación, que necesitaba WakeLock para mantener activo el servicio de inserción IMAP.
Para obtener una alternativa a BetterBatteryStats , consulte la aplicación Wakelock Detector mencionada en la respuesta de UzumApps , que parece más fácil de manejar, especialmente para los no expertos en tecnología :
Detector Wakelock - Haga clic en la imagen para ampliarla. (Fuente: Google Play )
¿Qué se puede hacer?
Si el caso es tan claro como en el segundo ejemplo en la sección anterior, la acción es bastante obvia, al menos en mi caso: no necesito que me informen de inmediato cuando llega un correo; Un retraso de 30 minutos es absolutamente aceptable. Así que entré en la aplicación de correo, deshabilité IMAP Push (ver también: Push Email ), y en su lugar cambié a un intervalo de sondeo de 30 minutos. WakeLocks no desapareció por completo, pero cayó notablemente: la duración de la batería mejoró notablemente.
Luego está el caso mencionado en la pregunta en sí: una aplicación de mal comportamiento que no lanza su WakeLock. Enfréntate al desarrollador con tus hallazgos y pide una solución. Si él cumple: problema resuelto. Si no: casi siempre hay una aplicación alternativa disponible.
¿Qué pasa si es el sistema Android en sí?
Sí, a veces se ve así: el 98% o más consumido por algún servicio de Android. Ah, si es 98%, en la mayoría de los casos el candidato se llama LocationManagerService . ¿Un tipo malo espiándonos? No necesariamente. En este caso especial, el "chico malo" que figura en la lista ni siquiera es culpable, al menos no directamente. Aquí hay otra aplicación que solicita la ubicación actual con demasiada frecuencia. Hay un excelente artículo en Setera.org acerca de esto: Señalar el drenaje de la batería de Android LocationManagerService . Para dar un resumen: utiliza Androiddumpsys
(¡requiere root!) para volcar un estado del sistema y le permite investigar los oyentes establecidos para el LocationManagerService. Una mirada más cercana a su configuración muestra que constantemente la están "martillando" para obtener información de ubicación (algunos lo hacen permanentemente, es decir, sin interrupción). Como la identificación de la aplicación aparece en la lista, y en otro lugar del vertedero, incluso junto con el nombre técnico de la aplicación, aún puede identificarla y tomar las medidas adecuadas.
¿Y qué hay de los ovnis?
Desafortunadamente, existen: aplicaciones que registraron un WakeLock, y luego salieron sin liberarlo. Lo que queda son * Obsoletes F *** ing no utilizados * - WakeLocks retenido sin uso. Así que no hay forma de llevar la aplicación a primer plano y volver a configurarla, o hacer que lance sus WakeLocks.
Aquí la única solución que conozco es reiniciar, y me gustaría tener una mejor solución. Por supuesto, si conoce la aplicación de culpabilidad, los pasos relacionados con ella son los mismos que los anteriores: informe al desarrollador, obtenga una solución o reemplace la aplicación. ¿Pero sobre deshacerse del WakeLock actual ? ¿Quizás alguien más pueda proporcionar una mejor alternativa al reinicio?
¿Hay algunas lecturas adicionales recomendadas?
Seguro. Uno por ahora, puedo agregar más más tarde:
/sys/power/wake_lock
, pero que si lo hacía de la manera "correcta" usando PowerManager y PowerManager.WakeLock, el servicio mantendría el wakelock real y lo liberan, incluso si el proceso fue muerto ...