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 Androiddumpsys
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:
/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é ...