Supongo que la mayoría de ustedes al menos han escuchado sobre WakeLocks . Muchos de ustedes ya los habrán experimentado , ya sea a sabiendas o no. Algunos pueden saber cómo tratar con ellos en general, pero solo unos pocos saben cómo tratar con los "candidatos más complicados".
Para aquellos que no lo saben, aunque el enlace anterior lleva a una explicación, un breve resumen: las aplicaciones pueden solicitar WAKE_LOCK
que un componente del dispositivo no "duerma", para que puedan realizar una tarea incluso cuando la pantalla está apagada. Esto es muy útil en la mayoría de los casos (p. Ej., Mantener la pantalla encendida mientras se navega, mantener el WiFi activo para transmitir música), pero si se usa de manera incorrecta, hace que la batería se agote a corto plazo (hasta un 25% por hora) .
La mayoría de las veces es fácil identificar la fuente (generalmente una aplicación que se comporta mal): lo mostraré en una respuesta a continuación, ya que podría resultar útil para muchos usuarios. Pero, ¿qué hacer si la aplicación que solicitó WakeLock se cierra sin liberarla? El sistema Android no se encargará de eso . Claro, un reinicio resolvería el problema, pero no siempre es una opción (deseada).
Entonces, desde la perspectiva de los usuarios (no estoy preguntando sobre soluciones de desarrollo, sino cómo un usuario puede manejar las cosas):
¿Qué puede hacer * el usuario * para resolver el problema y evitar que se agote la batería?
Prefiero respuestas que no involucren root (para que todos los usuarios puedan beneficiarse de ello). Sin embargo, las "soluciones arraigadas" son totalmente válidas y bienvenidas también.
fuente
/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 ...Respuestas:
¿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 Android
dumpsys
(¡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:
fuente
En resumen, esta es una muy buena pregunta, pero me temo que garantiza algo más que informar al usuario final.
Rediseñe el kernel para eliminar los bloqueos de activación y use una forma más exhaustiva y eficiente de administrar mejor el principio, prolongando así la vida útil de la batería.
Desafortunadamente, se ha aceptado como una solución de facto para permitir la "administración de energía" a pesar de que tampoco es exactamente eficiente. Hubo una extensa discusión sobre wakelocks (con Gregh Kroah Hartman, el gurú de Linux para el desarrollo de controladores, busco en Google el enlace exacto), otros sitios como LWN.net y otro artículo explicado en el mismo sitio aquí . Este fue el artículo al que Gregh Kroah Hartman se refirió en este blog , en el que parece estar de acuerdo con la solución alternativa propuesta por Rafael J. Wysocki que ha documentado mucho sobre la alternativa potencial. No estoy seguro de si eso está realmente en su lugar en el núcleo más moderno v3.xx
Las aplicaciones mal diseñadas pueden y a menudo solicitan wakelocks como mantener la pantalla encendida, pero de hecho, en este escenario para mantener la pantalla encendida, de hecho hay una manera más eficiente de hacer esto:
Si bien, tratando de mantener esto libre de jerga, etc. para el usuario final, realmente el núcleo del problema se reduce al código del núcleo en la forma en que se gestionan los wakelocks.
Aquí hay un breve resumen sobre XDA sobre lo que es wakelocks para los no iniciados. Al usar BetterBatteryStats , uno podría ver exactamente qué proceso está agotando la batería, el wiki está alojado en github y está disponible en el mercado aquí .
fuente
Echa un vistazo a Wakelock Detector: XDA-Developers / Google Play :
El detector Wakelock agrupa los wakelocks de la aplicación en una vista expandible para una mejor apariencia. Y muestra qué aplicaciones se están ejecutando. Y hay botones de información de desinstalación en la vista ampliada de la aplicación.
Haga clic en la imagen para ampliar. (Fuente: Google Play )
Divulgación: Soy uno de los desarrolladores responsables de esta aplicación. Cuatro amigos más están conmigo trabajando en este proyecto como hobby.
fuente
Un par de formas que ayudarían a los usuarios de dispositivos no rooteados
Este es un desarrollo reciente y, por lo tanto, lo publica para usuarios de dispositivos no rooteados. Probado como trabajando en Moto X Play (Android 6.0.1)
Descargar WLD desde el enlace de Play Store arriba
Manual para usar WLD aquí
Instrucciones para dispositivos no rooteados aquí . Tiene todos los detalles pero para resumir:
Habilite la depuración de USB en el dispositivo y
adb
Descargue Wakelock Unlocker para Chrome en su computadora portátil (también funciona en Chromium)
¡Actívelo y ya está!
La versión de Wakelock Detector Light no muestra estadísticas desde que se desconectó
Nota: No pude hacer que el segundo método funcionara, agradecería la solución de edición para que funcione para personas no inteligentes como yo
fuente