Wie gehe ich mit (verwaisten) WakeLocks um?

40

Ich denke , die meisten von Ihnen haben zumindest gehört etwa WakeLocks . Viele von Ihnen werden sie bereits erlebt haben - ob wissentlich oder nicht. Einige wissen vielleicht, wie man mit ihnen umgeht - aber nur wenige wissen, wie man mit den "komplizierteren Kandidaten" umgeht.

Für diejenigen, die nicht wissen, obgleich der obige Link zu einer Erklärung führt, eine kurze Zusammenfassung: Apps fordern möglicherweise a WAKE_LOCKauf, eine Gerätekomponente vom "Ruhezustand" abzuhalten, damit sie eine Aufgabe ausführen können, selbst wenn das Display ausgeschaltet ist. Dies ist in den meisten Fällen sehr nützlich (z. B. beim Navigieren den Bildschirm eingeschaltet lassen, das WLAN für das Streamen von Musik aktivieren). Bei falscher Verwendung wird der Akku jedoch kurzfristig entladen (bis zu 25% pro Stunde). .

In den meisten Fällen ist es einfach, die Quelle zu identifizieren (normalerweise handelt es sich um eine App mit schlechtem Verhalten). Ich werde dies in einer Antwort unten zeigen, da dies für viele Benutzer hilfreich sein kann. Aber was tun, wenn die App, die das WakeLock angefordert hat, beendet wird, ohne es freizugeben? Das Android-System kümmert sich nicht darum . Sicher, ein Neustart würde das Problem lösen - aber es ist nicht immer eine (gewünschte) Option.

Aus Benutzersicht (ich frage nicht nach Entwicklungslösungen, sondern danach, wie ein Benutzer mit Dingen umgehen kann):

Was kann * vom Benutzer * getan werden , um das Problem zu lösen und eine weitere Batterieentladung zu vermeiden?

Ich bevorzuge Antworten , bei denen root nicht beteiligt ist (damit alle Benutzer davon profitieren können). "Rooted Solutions" sind jedoch voll gültig und auch willkommen.

Izzy
quelle
2
Ich hatte den Eindruck, dass dies nur dann zutrifft, wenn Sie das Wakelock auf "falsche /sys/power/wake_lock" Weise mit PowerManager und PowerManager.WakeLock erstellt haben und geben Sie es frei, auch wenn Ihr Prozess getötet wurde ...
Izkata
1
Nach den Informationen, die ich verlinkt habe, ist das offensichtlich nicht der Fall. Jemand meldet dort, er habe die Kernelquellen überprüft und keinen Hinweis darauf gefunden. Hinweis für Entwickler: Anscheinend können "Teil-Wakelocks" zeitgesteuert angefordert werden , sodass sie automatisch ablaufen, wenn der Timer abgelaufen ist und der Wakelock-Abruf nicht aktualisiert wurde. Das muss der "sichere Weg" sein, auf den Sie sich beziehen.
Izzy

Antworten:

37

Wie kann ich feststellen, dass ich betroffen bin?

Dies ist wahrscheinlich die erste Frage an diejenigen, die mit diesem Thema nicht vertraut sind. Mit Gingerbread (Android 2.3) und höher haben Sie einen Dienst an Bord, der Ihnen hilft, Folgendes herauszufinden: Batteriestatistiken. Obwohl die Hersteller dazu neigen, sie an unterschiedlichen Stellen zu platzieren, finden Sie sie meist unter Einstellungen → Über das Telefon → Akku oder Ähnliches. Außerdem wird eine Liste der Apps angezeigt, die den größten Teil Ihres Akkus verwendet haben. Darüber befindet sich eine kleine Grafik. Tippen Sie darauf und Sie gelangen auf einen Bildschirm, der dem folgenden ähnlich ist:

Batteriestatistik
Screenshot der Batteriestatistik auf Android 2.3

Ich habe einen Screenshot von einem meiner Geräte ausgewählt, der das Problem veranschaulicht. Betrachtet man die unteren beiden blauen Balken ("Aktiv" = Gerät wurde wach gehalten (aktiv), "Bildschirm an" = "Bildschirm an"), so zeigt der am weitesten rechts stehende blaue Balken bei "Aktiv" an, dass ein WakeLock: Gerät trotz dessen beschäftigt war die Tatsache, dass der Bildschirm ausgeschaltet war. Somit können wir ziemlich sicher sein, dass wir ein WakeLock haben - aber wir können nicht sagen, wer es verursacht hat.

Wenn Ihr Gerät diesen Bildschirm nicht anbietet (oder die Balken unten: Ich habe gerade festgestellt, dass z. B. das LG Optimus 4X mit Android 4.0.3 diese Balken abgeschnitten hat), können Sie sie z. B. mit GSam Battery Monitor finden :

GSam Batteriemonitor
Ähnliche Informationen von GSam Battery Monitor - hier sind die genannten "blauen Balken" gelb / orange

Was hat das WakeLock verursacht?

Leider kann diese Frage mit vorinstallierten Apps nicht beantwortet werden (mit Ausnahme einiger benutzerdefinierter ROMs). Aber es gibt Tools, die das können. Der bekannteste Kandidat dafür ist BetterBatteryStats und zeigt uns die Ursache in seinem Teil-Wakelocks- Abschnitt:

BetterBatteryStats BetterBatteryStats2
Screenshots von BetterBatteryStats

Im ersten Beispiel 2 (entnommen aus der Playstore-Seite der App) war das Ereignis, das die meisten WakeLocks verursachte, ein gewünschtes: Wir möchten nicht, dass die Wiedergabe gestoppt wird, während Sie Musik hören. Das zweite Beispiel 3 (aus einem realen Fall auf einem meiner Geräte) könnte sich als besser herausstellen: Die drei häufigsten Ereignisse werden von derselben App verursacht, für die WakeLock erforderlich war, um den IMAP-Push-Dienst aktiv zu halten.

Eine Alternative zu BetterBatteryStats finden Sie in der Wakelock Detector- App, die in der Antwort von UzumApps erwähnt wurde. Dies scheint insbesondere für Nicht-Techniker einfacher zu sein:

Wakelock-Detektor: App-Details Wakelock-Detektor: Prozesse auswählen
Wakelock-Detektor - Klicken Sie auf das Bild, um es zu vergrößern. (Quelle: Google Play )

Was kann getan werden?

Wenn der Fall so klar ist wie im zweiten Beispiel im vorherigen Abschnitt, ist die Aktion ziemlich offensichtlich - zumindest in meinem Fall: Ich muss nicht sofort informiert werden, wenn eine Mail eintrifft. Eine Verzögerung von 30 Minuten ist absolut akzeptabel. Also ging ich in die Mail-App, deaktivierte IMAP-Push (siehe auch: Push-E-Mail ) und wechselte stattdessen zu einem 30-minütigen Abfrageintervall. WakeLocks sind nicht ganz verschwunden, sondern deutlich gesunken - die Akkulaufzeit hat sich merklich verbessert.

Dann ist da noch der Fall, der in der Frage selbst erwähnt wird: Eine App, die sich schlecht verhält und ihr WakeLock nicht veröffentlicht. Konfrontieren Sie den Entwickler mit Ihren Ergebnissen und fragen Sie nach einer Lösung. Wenn er liefert: Problem gelöst. Wenn nicht: Es gibt fast immer eine alternative App.

Was ist, wenn es das Android-System selbst ist?

Ja, manchmal sieht es so aus: 98% oder mehr werden von einem Android-Dienst verbraucht. Oh, wenn es 98% sind, heißt der Kandidat in den meisten Fällen LocationManagerService . Bösewicht, der uns ausspioniert? Nicht unbedingt. In diesem speziellen Fall ist der aufgeführte "Bösewicht" nicht einmal schuldig - zumindest nicht direkt. Hier ist es eine andere App, die zu häufig den aktuellen Standort abfragt. Auf Setera.org gibt es einen ausgezeichneten Artikel dazu: Feststellen des Batterieverbrauchs von Android LocationManagerService . Um eine Zusammenfassung zu geben: Es verwendet AndroiddumpsysFeature (erfordert root!), um einen Systemstatus zu sichern, und ermöglicht es Ihnen, die für den LocationManagerService eingerichteten Listener zu untersuchen. Ein genauerer Blick auf ihre Konfiguration zeigt, welche ständig nach Ortsinformationen "hämmern" (manche tun dies permanent, dh ohne Unterbrechung). Da die ID der App zusammen mit dem technischen Namen der App an einer anderen Stelle im Dump aufgeführt ist, können Sie sie dennoch identifizieren und entsprechende Maßnahmen ergreifen.

Und was ist mit UFOs?

Leider gibt es solche: Apps, die ein WakeLock registriert - und dann beendet haben, ohne es freizugeben. Übrig bleiben * Unbenutzte veraltete Dateien * - WakeLocks, die nicht mehr verwendet werden können. Es ist also nicht möglich, die App einfach in den Vordergrund zu stellen und neu zu konfigurieren oder ihre WakeLocks freizugeben.

Hier ist mir nur ein Neustart bekannt - und ich hätte gerne eine bessere Lösung. Wenn Sie die App für schuldige Personen kennen, sind die entsprechenden Schritte dieselben wie oben: Informieren Sie den Entwickler, besorgen Sie sich eine Lösung - oder ersetzen Sie die App. Aber über das aktuelle WakeLock loswerden? Vielleicht kann jemand anderes eine bessere Alternative zum Neustart bieten?

Gibt es einige empfohlene weitere Lesungen?

Sicher. Eines möchte ich später noch hinzufügen:

Izzy
quelle
2
Bessere Schulung für Entwickler, um zu sagen ... "Löse Wakelocks, wenn du mit ihnen fertig bist und räum nach dir selbst auf"?
t0mm13b
3
Wenden Sie sich an mich für Ihre wie immer umwerfende Antwort !!! Es wird dir nie langweilig, oder? : D
t0mm13b
2
Klar - aber siehe meine Frage: Ich frage ausdrücklich NICHT nach der Entwicklerseite, sondern aus Benutzersicht . Vielleicht muss ich das klarer machen;)
Izzy
1
Gelangweilt? Kann mir bitte jemand erklären, wie das ist? XD Nein, ich habe immer etwas im Kopf. Wenn ich das für gut genug halte, frage ich hier sogar nach (siehe mein Profil: Ich frage nicht oft), obwohl ich möglicherweise eine (teilweise) Antwort habe. Das Feedback hier ist immer erfrischend, wenn sich die Frage lohnt :)
Izzy
1
Bitte! Und berichten Sie über Ihre Erkenntnisse! Ich hatte gerade das beschriebene Problem mit den "verwaisten" WakeLocks. Ich stöberte eine Stunde herum und kam nicht weiter, als zu sehen, dass es sich um den LocationManagerService handelte . Für Updates registriert alle 0sec (sic!) Waren die Android Einstellungen (=: - 0). Ich verließ es, stoppte es, tötete es an der Kommandozeile ... keine Möglichkeit, die Schlösser loszuwerden. WTF hat dort Settings gemacht ? Ein Neustart hat es natürlich gelöst - aber ist dies ein WindowsPhone, das wir zweimal am Tag neu starten müssen?
Izzy
6

Kurz gesagt, dies ist eine sehr gute Frage, aber ich fürchte, es ist mehr als nur angebracht, den Endbenutzer darauf aufmerksam zu machen!

Entwickeln Sie den Kernel neu, um Wake-Locks zu beseitigen und das Prinzip gründlicher und effizienter zu verwalten, wodurch die Batterielebensdauer verlängert wird.

Leider wurde es als De-facto-Lösung akzeptiert, "Power Management" zu ermöglichen, obwohl es auch nicht gerade effizient ist! Es gab eine ausführliche Diskussion über Wakelocks (mit Gregh Kroah Hartman - dem Linux-Guru für Treiberentwicklung - werde nach dem genauen Link gesucht), andere Sites wie LWN.net und einen anderen Artikel, der auf derselben Site hier erklärt wurde . Dies war der Artikel, in dem Gregh Kroah Hartman auf diesen Blog verwies , in dem er der von Rafael J. Wysocki vorgeschlagenen Alternativlösung zuzustimmen scheint, die viel über die mögliche Alternative dokumentiert hat. Bin mir nicht sicher, ob das im moderneren Kernel v3.xx tatsächlich vorhanden ist

Schlecht gestaltete Apps können und fordern häufig Wakelocks an, z. B. den Bildschirm eingeschaltet zu lassen. In diesem Szenario gibt es jedoch eine effizientere Möglichkeit, um den Bildschirm eingeschaltet zu lassen:

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

Während wir uns bemühen, dies für den Endbenutzer von Fachjargon usw. fernzuhalten, läuft der Kern des Problems darauf hinaus, wie die Wakelocks verwaltet werden.

Hier ist eine kurze Zusammenfassung über XDA, was Wakelocks für Uneingeweihte sind. Durch die Verwendung von BetterBatteryStats , könnte man genau sehen , welcher Prozess die Batterie Abtropfen wird das Wiki auf Github gehostet und ist auf dem Markt erhältlich hier .

t0mm13b
quelle
1
Witzig, dass Sie auf denselben XDA-Thread verweisen, den ich erwähnt habe. Ich bin damit einverstanden, dass das System besser aufpasst (z. B. indem WakeLocks freigegeben wird, die von Apps angefordert werden, die nicht mehr ausgeführt werden). Und dass Entwickler beim Codieren besser aufpassen sollten (indem sie diese explizit in den entsprechenden Zuständen des Lebenszyklus freigeben). Aber das hilft uns Benutzern nicht, es zu wissen . Ich hoffe, meine Antwort gibt einen Einblick in das, was ein Benutzer tun kann - und dass einer von Ihnen "Technikfreaks" die verbleibende Lücke füllen kann!
Izzy
3

Check out Wakelock-Detektor: XDA-Entwickler / Google Play :

Der Wakelock-Detektor gruppiert die Wakelocks der App in einer erweiterbaren Ansicht, um ein besseres Aussehen zu erzielen. Und es zeigt, welche Apps ausgeführt werden. In der erweiterten Ansicht der App gibt es Schaltflächen für Deinstallationsinformationen zum Beenden.

Wakelock-Detektor: App-Details Wakelock-Detektor: Prozesse auswählen
Klicken Sie auf das Bild, um es zu vergrößern. (Quelle: Google Play )

Offenlegung: Ich bin einer der verantwortlichen Entwickler für diese App. Vier weitere Freunde arbeiten mit mir als Hobby an diesem Projekt.

UzumApps
quelle
Danke! Das ist in der Tat eine wertvolle Information. Würde es Ihnen etwas ausmachen, Ihrer Antwort einige Details hinzuzufügen, z. B. was macht es so besonders? Ich würde dann ein paar Screenshots hinzufügen. Bis das erledigt ist: Hier ist der Playstore-Link zur App ...
Izzy
Vielen Dank für die Details! Ich habe sie in Ihrer Antwort zusammengeführt, ich hoffe, es macht Ihnen nichts aus :) Frage zum Verständnis: Sagen Sie, eine App fragt den Standort mit einem Intervall von "0 Sekunden" ab. Dies würde dazu führen, dass der LocationService das Gerät sperrt. Würde Wake Lock Detector die verantwortliche App dann als die eigentliche Ursache anzeigen - oder den LocationService , da er nicht Teil dieses App- Pakets ist?
Izzy
Die Antwort auf Ihre Frage lautet "Nein", da Wakelock-Detektoren Wakelocks gruppieren, die zum selben App-Paketnamen gehören. Da der
Ortungsdienst
Danke vielmals! Ich hoffte auf eine einfache Lösung für das "Was ist, wenn es das Android-System selbst ist?" Teil. Scheint so etwas nicht zu geben - aber wenn es möglich ist, könnte es eine gute Idee sein, sich in WLD zu integrieren :)
Izzy
2
Vielen Dank für Ihre Meinung, ich werde darüber nachdenken und daran arbeiten. WLD sieht gut aus !!! :)
UzumApps
1

Eine Reihe von Möglichkeiten, um Benutzern ohne Rootberechtigung zu helfen

  1. Angesichts der Tatsache, dass @Uzumapps, einer der Entwickler der App, eine Lösung mit Wakelock Detector ( WLD ) veröffentlicht hat, bin ich überrascht, dass er nicht über die Verwendung der App informiert wurde, die auch ohne Root-Benutzer namens Wakelock Detector Light verwendet werden kann ! Ich entdeckte dies auf der Suche nach einer Lösung für mein neues Gerät (nicht gewurzelt).

Dies ist eine neuere Entwicklung und wird daher für Benutzer von nicht verwurzelten Geräten veröffentlicht. Getestet als funktionierend auf Moto X Play (Android 6.0.1)

  • Laden Sie WLD über den obigen Link im Play Store herunter

  • Handbuch zur Verwendung von WLD hier

  • Anleitung für nicht gerootete Geräte hier . Es hat alle Details, aber um es zusammenzufassen:

    adb shell dumpsys power | grep -i partial_wake_lock

Hinweis: Ich konnte die zweite Methode nicht zum Laufen bringen. Ich würde es begrüßen, wenn die Bearbeitungslösung für nicht versierte Leute wie mich funktioniert

Beeshyams
quelle