Ich denke, die meisten von Ihnen haben zumindest von WakeLocks gehört . Viele von Ihnen werden sie bereits erlebt haben – ob wissentlich oder nicht. Manche wissen vielleicht, wie man mit ihnen im Allgemeinen umgeht – aber nur wenige wissen, wie man mit den „komplizierteren Kandidaten“ umgeht.
Für diejenigen, die es nicht wissen, obwohl der obige Link zu einer Erklärung führt, eine kurze Zusammenfassung: Apps können a anfordern WAKE_LOCK
, eine Gerätekomponente aus dem "Schlafmodus" zu halten, 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. den Bildschirm während der Navigation eingeschaltet zu lassen, das WLAN zum Streamen von Musik aktiv zu halten) – aber falsch verwendet führt es dazu, dass Ihr Akku kurzfristig entladen wird (bis zu 25 % pro Stunde). .
Meistens ist es einfach, die Quelle zu identifizieren (normalerweise eine schlecht funktionierende App) – ich werde dies in einer Antwort unten zeigen, da es sich für viele Benutzer als hilfreich erweisen könnte. 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 (erwünschte) Option.
Also aus Benutzersicht (ich frage nicht nach Entwicklungslösungen, sondern 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 ohne Root (damit alle Benutzer davon profitieren können). Aber auch „Rooted Solutions“ sind voll gültig und willkommen.
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, herauszufinden: Batteriestatistiken. Obwohl die Hersteller dazu neigen, es an verschiedenen Stellen zu platzieren, ist es meistens unter Einstellungen → Über das Telefon → Akku oder ähnliches zu finden und zeigt eine Liste der Apps, die den größten Teil Ihres Akkus verbraucht haben. Darüber befindet sich eine kleine Grafik. Tippen Sie darauf und Sie gelangen zu einem ähnlichen Bildschirm wie diesem:
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"), zeigt der rechte blaue Balken bei "Aktiv" ein WakeLock: Gerät wurde trotzdem beschäftigt gehalten die Tatsache, dass der Bildschirm ausgeschaltet war. So 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 bietet (oder die Balken unten: Ich habe gerade entdeckt, 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 :
Ähnliche Informationen von GSam Battery Monitor - hier sind die erwähnten "blauen Balken" gelb/orange
Leider lässt sich diese Frage nicht mit vorinstallierten Apps beantworten (außer vielleicht einigen Custom ROMs). Aber es gibt Tools, die das können. Der bekannteste Kandidat dafür ist BetterBatteryStats , und zeigt uns die Ursache in seinem Abschnitt über teilweise Wakelocks :
Screenshots von BetterBatteryStats
Im ersten Beispiel 2 (aus der Playstore-Seite der App) war das Ereignis, das die meisten WakeLocks verursacht, ein gewünschtes: Wir möchten nicht, dass die Wiedergabe beim Musikhören gestoppt wird. Das zweite Beispiel 3 (aus einem realen Fall auf einem meiner Geräte) könnte sich also als besser erweisen: Die obersten 3 Ereignisse werden von derselben App verursacht, die das WakeLock benötigte, 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 wird – die insbesondere für Nicht-Techniker einfacher zu handhaben scheint:
Wakelock-Detektor -- Zum Vergrößern auf das Bild klicken. (Quelle: GooglePlay )
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 benachrichtigt werden, wenn eine Mail ankommt; eine Verzögerung von 30min ist absolut akzeptabel. Also ging ich in die Mail-App, deaktivierte IMAP-Push (siehe auch: Push-E-Mail ) und stellte stattdessen auf ein 30-minütiges Abfrageintervall um. WakeLocks verschwanden nicht vollständig, gingen aber deutlich zurück – die Akkulaufzeit verbesserte sich merklich.
Dann gibt es den Fall, der in der Frage selbst erwähnt wird: Eine sich schlecht verhaltende App, die ihr WakeLock nicht freigibt. Konfrontieren Sie den Entwickler mit Ihren Erkenntnissen und bitten Sie um eine Lösung. Liefert er: Problem gelöst. Falls nicht: Es gibt fast immer eine alternative App.
Ja, manchmal sieht es genau 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 dazu einen ausgezeichneten Artikel: Pinpointing Android LocationManagerService battery drain . Um eine Zusammenfassung zu geben: Es verwendet Androiddumpsys
-Funktion (erfordert Root!) zum Sichern eines Systemstatus und ermöglicht es Ihnen, die für den LocationManagerService eingerichteten Listener zu untersuchen. Ein genauerer Blick auf ihre Konfiguration zeigt, dass sie ständig nach Standortinformationen "hämmern" (einige tun dies permanent, dh ohne Unterbrechung). Da die App-ID zusammen mit dem technischen Namen der App und an anderer Stelle im Dump aufgeführt ist, können Sie sie dennoch identifizieren und entsprechende Maßnahmen ergreifen.
Leider gibt es solche: Apps, die ein WakeLock registriert haben – und dann beendet wurden, ohne es freizugeben. Was übrig bleibt, sind *Unused F***ing Obsoletes* – WakeLocks, die für keinen Gebrauch gehalten werden. Also keine Möglichkeit, die App einfach in den Vordergrund zu bringen und neu zu konfigurieren oder ihre WakeLocks freizugeben.
Hier ist die einzige mir bekannte Lösung ein Neustart - und ich hätte gerne eine bessere Lösung. Wenn Sie die schuldige App kennen, sind die diesbezüglichen Schritte natürlich die gleichen wie oben: Informieren Sie den Entwickler, erhalten Sie eine Lösung – oder ersetzen Sie die App. Aber um das aktuelle WakeLock loszuwerden? Vielleicht kann jemand anderes eine bessere Alternative zum Neustart bieten?
Sicher. Eines für jetzt, ich kann später mehr hinzufügen:
Kurz gesagt, dies ist eine sehr gute Frage, aber ich fürchte, sie erfordert mehr, als nur den Endbenutzer darauf aufmerksam zu machen!
Entwerfen Sie den Kernel neu, um Wakelocks zu eliminieren, und verwenden Sie eine gründlichere und effizientere Methode, um das Prinzip besser zu verwalten und dadurch die Batterielebensdauer zu verlängern.
Leider wurde es als De-facto-Lösung akzeptiert, um "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 die Treiberentwicklung – ich googel nach dem genauen Link), anderen Websites wie LWN.net und einem weiteren Artikel, der auf derselben Website hier erklärt wurde . Dies war der Artikel, auf den Gregh Kroah Hartman in diesem Blog verwies, in dem er der von Rafael J. Wysocki vorgeschlagenen Alternativlösung zuzustimmen scheint . Er hat viel über die mögliche Alternative dokumentiert. Ich bin mir nicht sicher, ob das tatsächlich im moderneren Kernel v3.xx vorhanden ist
Schlecht gestaltete Apps können und oft Wakelocks anfordern, wie z.
getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
Während wir uns bemühen, dies für den Endbenutzer frei von Fachjargon usw. zu halten, läuft der Kern des Problems wirklich auf den Kernel-Code hinaus, wie die Wakelocks verwaltet werden.
Hier ist eine kurze Zusammenfassung von XDA darüber, was Wakelocks für Uneingeweihte sind. Durch die Verwendung von BetterBatteryStats konnte man genau sehen, welcher Prozess die Batterie leert, das Wiki wird auf Github gehostet und ist hier auf dem Markt erhältlich .
Schauen Sie sich Wakelock Detector an: XDA-Developers / Google Play :
Der Wakelock-Detektor gruppiert die Wakelocks der App zur besseren Übersicht in einer erweiterbaren Ansicht. Und es zeigt, welche Apps ausgeführt werden. Und in der erweiterten Ansicht der App gibt es Schaltflächen zum Beenden der Deinstallation.
Klicken Sie auf das Bild, um es zu vergrößern. (Quelle: GooglePlay )
Offenlegung: Ich bin einer der verantwortlichen Entwickler für diese App. Vier weitere Freunde arbeiten mit mir als Hobby an diesem Projekt.
Ein paar Möglichkeiten, die nicht gerooteten Gerätebenutzern helfen würden
Dies ist eine neuere Entwicklung und wird daher für Benutzer von nicht gerooteten Geräten veröffentlicht. Getestet auf Moto X Play (Android 6.0.1)
Laden Sie WLD vom Play Store-Link oben herunter
Anleitung zur Verwendung von WLD hier
Anleitungen für nicht gerootete Geräte hier . Es hat alle Details, aber um es zusammenzufassen:
Aktivieren Sie das USB-Debugging auf dem Gerät undadb
Laden Sie Wakelock Unlocker für Chrome auf Ihren Laptop herunter (funktioniert auch auf Chromium)
Aktivieren Sie es und Sie sind fertig!
Wakelock Detector Light-Version zeigt keine Statistiken seit Unplugged an
ADB-Shell-Dumpsys-Leistung | grep -i partial_wake_lock
Hinweis: Ich konnte die zweite Methode nicht zum Laufen bringen, würde eine Bearbeitungslösung begrüßen, damit sie für nicht versierte Leute wie mich funktioniert
Izkata
/sys/power/wake_lock
Sie , aber dass, wenn Sie es auf die „richtige“ Weise mit PowerManager und PowerManager.WakeLock erstellt haben, der Dienst beide das echte Wakelock enthalten würde und geben Sie es frei, auch wenn Ihr Prozess beendet wurde ...Izzy