Je suppose que la plupart d'entre vous au moins avez entendu parler de WakeLocks . Beaucoup d’entre vous les auront déjà expérimentés - que ce soit en connaissance de cause ou non. Certains savent peut-être comment les gérer en général - mais peu d’entre eux savent comment s’adapter aux "candidats les plus compliqués".
Pour ceux qui ne le savent pas, le lien ci-dessus mène à une explication, un bref résumé: Les applications peuvent demander WAKE_LOCK
à laisser un composant de l'appareil en veille afin qu'elles puissent effectuer une tâche même lorsque l'écran est éteint. Ceci est très utile dans la plupart des cas (par exemple, en gardant l’écran allumé pendant la navigation, en gardant le Wi-Fi actif pour diffuser de la musique), mais si vous l’utilisez mal, votre batterie sera épuisée rapidement (jusqu’à 25% par heure). .
La plupart du temps, il est facile d'identifier la source (en général, une application qui se comporte mal) - je vais le montrer dans une réponse ci-dessous, car cela pourrait s'avérer utile pour de nombreux utilisateurs. Mais que faire si l'application qui a demandé le WakeLock se ferme sans le relâcher? Le système Android ne s'en occupera pas . Bien sûr, un redémarrage résoudrait le problème - mais ce n’est pas toujours une option (souhaitée).
Donc, du point de vue des utilisateurs (je ne parle pas des solutions de développement, mais comment un utilisateur peut gérer les choses):
Que peut-on faire * de la part de l'utilisateur * pour résoudre le problème et éviter l'épuisement supplémentaire de la batterie?
Je préfère les réponses n'impliquant pas la racine (pour que tous les utilisateurs puissent en bénéficier). Toutefois, les "solutions enracinées" sont tout à fait valables et sont également les bienvenues.
/sys/power/wake_lock
, mais que si vous le faisiez de la "bonne" manière en utilisant PowerManager et PowerManager.WakeLock, le service détiendrait tous les deux le véritable wakelock. et relâchez-le même si votre processus était tué ...Réponses:
Comment puis-je savoir que je suis affecté?
C'est probablement la première question à ceux qui ne sont pas familiers avec ce sujet. Avec Gingerbread (Android 2.3) et les versions ultérieures, vous disposez d'un service qui vous aide à comprendre: les statistiques de la batterie. Bien que les fabricants tendent à le placer à différents points, il se trouve principalement dans Paramètres → À propos du téléphone → Batterie ou similaire, et affiche une liste des applications ayant utilisé presque toute votre batterie. En plus de cela est un petit graphique. Appuyez dessus, et cela vous mènera à un écran similaire à celui-ci:
Capture d'écran des statistiques de la batterie sur Android 2.3
J'ai choisi une capture d'écran de l'un de mes appareils qui illustre le problème. En regardant les deux barres bleues inférieures ("Aktiv" = le périphérique a été maintenu éveillé (actif), "Bildschirm an" = "Screen on"), la barre bleue la plus à droite sur "Aktiv" indique un WakeLock: le périphérique a été maintenu occupé malgré le fait que l'écran était éteint. Nous pouvons donc être pratiquement certains que nous avons un WakeLock - mais nous ne pouvons pas dire qui l’a provoqué.
Si votre appareil ne propose pas cet écran (ou les barres en bas: je viens de découvrir par exemple que le LG Optimus 4X sous Android 4.0.3 a coupé ces barres), vous pouvez les trouver par exemple à l'aide de GSam Battery Monitor :
Des informations similaires de GSam Battery Monitor - ici les "barres bleues" mentionnées sont jaune / orange
Quelle est la cause du WakeLock?
Malheureusement, il est impossible de répondre à cette question à l'aide d'applications préinstallées (à l'exception peut-être de certaines ROM personnalisées). Mais il existe des outils disponibles qui peuvent. Le meilleur candidat connu est BetterBatteryStats , et nous en montre la cause dans sa section sur les réveils partiels :
Captures d'écran de BetterBatteryStats
Dans le premier exemple 2 (tiré de la page Playstore de l'application), l'événement à l'origine de la plupart des WakeLocks était un événement souhaité: nous ne voulons pas que la lecture soit arrêtée lors de l'écoute de musique. Ainsi, le deuxième exemple 3 (tiré d'un cas réel sur l'un de mes appareils) pourrait s'avérer meilleur: les 3 événements les plus importants sont causés par la même application, qui nécessitait le WakeLock pour maintenir le service push IMAP actif.
Pour une alternative à BetterBatteryStats , consultez l' application Wakelock Detector mentionnée dans la réponse d'UzumApps - qui semble plus facile à gérer, en particulier pour les non-techniciens:
Wakelock Detector - Cliquez sur l'image pour l'agrandir. (Source: Google Play )
Ce qui peut être fait?
Si le cas est aussi clair que dans le deuxième exemple de la section précédente, l'action est assez évidente - du moins dans mon cas: je n'ai pas besoin d'être informé immédiatement lorsqu'un courrier arrive; un délai de 30 minutes est tout à fait acceptable. Je suis donc allé dans l'application de messagerie, j'ai désactivé IMAP Push (voir aussi: Push Email ) et je suis passé à un intervalle d'interrogation de 30 minutes. WakeLocks n'a pas complètement disparu, mais a chuté de façon notable - la durée de vie de la batterie s'est nettement améliorée.
Ensuite, il y a le cas mentionné dans la question elle-même: une mauvaise application ne libérant pas son WakeLock. Confrontez le dev avec vos découvertes et demandez une solution. S'il livre: problème résolu. Si non: il y a presque toujours une application alternative disponible.
Et si c'est le système Android lui-même?
Ouais, parfois ça ressemble à ça: 98% ou plus consommé par certains services Android. Oh, si c'est 98%, dans la plupart des cas, le candidat s'appelle LocationManagerService . Un méchant nous espionnant? Pas nécessairement. Dans ce cas particulier, le "méchant" cité dans la liste n’est même pas coupable - du moins pas directement. Ici, il s'agit d'une autre application demandant trop fréquemment l'emplacement actuel. Il existe un excellent article sur Setera.org à ce sujet: Identifier l' épuisement de la batterie de l'Android LocationManagerService . Pour donner un résumé: Il utilise Android
dumpsys
fonctionnalité (nécessite la racine!) pour vider un état du système et vous permettre d’examiner les écouteurs établis pour LocationManagerService. Un examen plus approfondi de leur configuration montre des informations qui «martèlent» constamment pour obtenir des informations de localisation (certaines le font en permanence, c'est-à-dire sans interruption). Comme l'ID de l'application est répertorié, et à un autre endroit de la sauvegarde, même avec le nom technique de l'application, vous pouvez toujours l'identifier et prendre les mesures appropriées.Et qu'en est-il des ovnis?
Malheureusement, il existe de telles applications: les applications qui ont enregistré un WakeLock - et qui sont ensuite sorties sans le relâcher. Ce qui reste sont * Obsolètes non utilisés * - WakeLocks n'est pas utilisé. Il n'y a donc aucun moyen de simplement mettre l'application au premier plan et de la reconfigurer, ou de lui faire publier ses WakeLocks.
Ici, la seule solution que je connaisse est un redémarrage - et j'aimerais avoir une meilleure solution. Bien sûr, si vous connaissez l'application coupable, les étapes la concernant sont les mêmes que ci-dessus: informez le dev, obtenez une solution - ou remplacez l'application. Mais pour vous débarrasser du WakeLock actuel ? Peut-être que quelqu'un d'autre peut fournir une meilleure alternative au redémarrage?
Y a-t-il des lectures supplémentaires recommandées?
Sûr. Un pour l'instant, je pourrais en ajouter d'autres plus tard:
la source
En bref, c’est une très bonne question, mais je crains que cela ne se limite pas à informer l’utilisateur final!
Redéfinissez le noyau pour éliminer les verrous de réveil et utilisez un moyen plus efficace de mieux gérer le principe, prolongeant ainsi la durée de vie de la batterie.
Malheureusement, il a été accepté comme une solution de facto pour permettre la "gestion de l'alimentation", même s'il n'est pas vraiment efficace non plus! Il y a eu une discussion approfondie sur les wakelocks (avec Gregh Kroah Hartman - le gourou de Linux pour le développement de pilotes - cherche Google pour le lien exact), d'autres sites tels que LWN.net et un autre article expliqué sur le même site ici . C’est l’article que Gregh Kroah Hartman a mentionné dans ce blog , dans lequel il semble être d’accord avec la solution de rechange proposée par Rafael J. Wysocki et a beaucoup documenté sur l’alternative potentielle. Je ne suis pas sûr que cela soit réellement en place dans le noyau plus moderne v3.xx
Des applications mal conçues peuvent et demandent souvent des réveils tels que le maintien de l'écran, mais en réalité, dans ce scénario, l'écran est en réalité un moyen plus efficace de le faire:
Bien que nous nous efforcions d'éviter le jargon, etc., de l'utilisateur final, le cœur du problème se résume au code du noyau de la façon dont les wakelocks sont gérés.
Voici un bref résumé de XDA sur ce qui est wakelocks pour les non-initiés. En utilisant BetterBatteryStats , on peut voir exactement quel processus épuise la batterie, le wiki est hébergé sur github et est disponible sur le marché ici .
la source
Découvrez le détecteur Wakelock: XDA-Developers / Google Play :
Le détecteur Wakelock regroupe les réveils de l'application dans une seule vue extensible pour une meilleure apparence. Et cela montre quelles applications sont en cours d'exécution. Et il y a des boutons d'information sur la désinstallation dans la vue développée de l'application.
Cliquez sur l'image pour l'agrandir. (Source: Google Play )
Divulgation: Je suis l'un des développeurs responsables de cette application. Quatre autres amis travaillent avec moi sur ce projet en tant que passe-temps.
la source
Quelques façons d'aider les utilisateurs d' appareils non racinés
Il s’agit d’un développement récent et, par conséquent, de l’afficher pour les utilisateurs d’appareils non racinés. Testé comme fonctionnant sur Moto X Play (Android 6.0.1)
Téléchargez le lien WLD du Play store ci-dessus
Manuel d'utilisation de WLD ici
Instructions pour les appareils non enracinés ici . Il a tous les détails mais pour résumer:
Activer le débogage USB sur le périphérique et
adb
Téléchargez Wakelock Unlocker for Chrome sur votre ordinateur portable (fonctionne également sur Chromium)
Activez-le et vous avez terminé!
La version de Wakelock Detector Light n'affiche pas les statistiques depuis Unplugged
Remarque: je ne pouvais pas utiliser la deuxième méthode, j'aimerais une solution de montage pour que cela fonctionne avec des types non avertis comme moi.
la source