Wakelocks sorgen dafür, dass das System nicht in den Ruhezustand wechselt. Es wäre schließlich ungünstig, wenn während der Navigation ständig das Display ausgehen würde. Doch manchmal sind die Auswirkungen alles andere als erwünscht.
Die meisten Android-Anwender haben – bewusst oder unbewusst – bereits mit WakeLocks zu tun gehabt. Eingangs genanntes Beispiel verdeutlicht, wo sie in wünschenswerter Weise zum Einsatz kommen.
Was sind WakeLocks?
Eine der größten Schwachstellen moderner Smartphones ist nach wie die kurze Laufzeit. Smartphones sind längst mehr als mobile Telefone mit zusätzlichen Spielereien – sondern eher moderne Computer im Hosentaschen-Format, mit denen man auch telefonieren kann. Um möglichst gute Akku-Laufzeiten zu erreichen, muss also mit den vorhandenen Ressourcen möglichst sparsam umgegangen werden, ohne den Anwender dabei einzuschränken!
Das ist die Aufgabe des Power-Managements. Wenn der Bildschirm abgeschaltet ist, drosselt das System seinen Leistungsbedarf am stärksten, indem es sich in einen Ruhezustand begibt: Die CPU senkt seine Taktrate auf ein Minimum und je nach Hersteller, Gerät und Einstellungen deaktiviert das System auch das WLAN und andere (Daten-)Dienste. Ein WakeLock [1] verhindert, dass das System sich in diesen Ruhezustand begeben kann.
Während dies in vielen Fällen durchaus sinnvoll ist (Bildschirm für die Navigation aktiviert lassen, Daten im Hintergrund synchronisieren), führt eine falsch bzw. schlecht programmierte App nur zu einem sich schnell leerenden Akku – wenn eine App beispielsweise vergisst, einen angeforderten WakeLock wieder freizugeben, und dieser damit bis zum nächsten Reboot bestehen bleibt [2].
WakeLocks aufspüren
Seit Android 2.3 steht dem Anwender ein Bordmittel zur Verfügung, das bei der Erkennung eines solchen Problems helfen kann: Die Akku-Statistiken. Zu finden sind diese in den System-Einstellungen des Gerätes, meist unter Info | Akkuverbrauch. Hier werden die größten Verbraucher seit der letzten Trennung vom Ladekabel angezeigt.
Über dieser Liste befindet sich eine kleine Grafik, die sicher so mancher nie für etwas besonderes hielt. Tippt man auf selbige, wird der Akku-Verbrauch grafisch dargestellt. Finden sich unter „Aktiv“ größere blaue Bereiche an Stellen, die unter „Bildschirm an“ keine Entsprechung haben – dann hat man mit großer Wahrscheinlichkeit ein WakeLock-Problem. Ebenfalls für ein WakeLock-Problem bzw. ein Problem mit einer bestimmten App spricht, wenn an der ersten Stelle der Energieverbraucher nicht das Display oder der Ruhezustand sondern der Eintrag Android OS steht.
Beide Grafiken verraten nur, dass hier wohl ein WakeLock-Problem vorliegt – nicht aber wer es verursacht hat. Auch geben die Bordmittel dazu seit Android 2.3 keine weitere Auskunft mehr: Die noch bei Android 2.2 verfügbaren ausführlichen Statistiken (dort über den „Secret Code“ *#*#4636#*#*
per Dialer erreichbar) wurden entfernt. Abhilfe schafft die App BetterBatteryStats [3] aus dem Play Store. Sie zeigt die seit dem letzten Ladevorgang aufgetretenen WakeLocks und ihre Verursacher an.
Schlaflose Apps bändigen
In diesem Beispiel ist der Fall klar: Die Mail-App K-9 Mail hat die WakeLocks verursacht. Schuld ist hier aber nicht etwa der Entwickler, sondern die Konfiguration: Der IMAP Push Service [4] benötigt für eine sofortige Benachrichtigung bei eingehender Mail eine permanente Netzverbindung – für die die Netzwerk-Komponente des Handys natürlich wach gehalten werden muss.
Kann man daher mit einer Verzögerung von 30 Minuten oder mehr leben, empfiehlt sich hier eine Umstellung auf das alt hergebrachte „Polling“, und K-9 Mail fragt in regelmäßigen Abständen (etwa stündlich) selbständig beim Server nach. Diese Änderung führte im dargestellten Fall zu etwa 10% mehr Akku-Laufzeit.
Nicht immer ist eine Lösung jedoch vom Anwender erbringbar – beispielsweise bei einem Programmier-Fehler der App. Hält eine App ein WakeLock etwa unnötig lange oder vergisst ihn gar wieder frei zu geben, kann der Anwender nicht viel machen. Lässt sich ein WakeLock daher nicht, wie im Beispiel K-9 Mail, anhand der Konfiguration klären, bleibt nur eine Anfrage beim Entwickler.
Dessen Kontakt-Daten sollten auf der jeweiligen App-Seite des Google Play Store zu finden sein; oft finden sich sogar in der App selbst die entsprechenden Informationen. Kann der Entwickler nicht helfen, oder reagiert erst gar nicht, findet sich im Play Store sicher eine bessere Alternative.
WakeLocks durch System-Service
Auch das ist keine Seltenheit: Ein einziger System-Service ist für 98% der gehaltenen WakeLocks als verantwortlich ausgewiesen – und hat das System konstant wach gehalten. Diese Beschreibung trifft insbesondere auf den LocationManagerService häufig zu. Schuld ist aber letztendlich nicht unbedingt der ausgewiesene Service, sondern eine den Service in Anspruch nehmende App, die zu häufig (in manchen Fällen sogar ununterbrochen!) nach dem aktuellen Standort fragt.
Für den LocationManagerService belegt dies ein Artikel bei Setera.ORG [5] sehr schön, der auch zeigt, wie sich der eigentliche Verursacher aufspüren lässt. In diesem Fall sind jedoch Root-Rechte auf dem Gerät notwendig, da zur Analyse auf detaillierte System-Informationen zugegriffen werden muss.
Weiterführende Informationen
Natürlich lassen sich nicht alle Spezialfälle in einem Artikel behandeln. Hier kann ich nur hoffen, das Grundproblem und den grundsätzlichen Umgang damit gut veranschaulicht zu haben. Generell ist BetterBatteryStats das Werkzeug der Wahl, will man WakeLocks auf den Grund gehen. Da diese App von einem XDA-Member geschrieben wurde, finden sich ausführlichere Informationen zu deren Anwendung natürlich auch bei den XDA-Developers [6].
Ebenso werden auf der Website auch WakeLocks allgemein eingehender behandelt: Etwa im XDA-Wiki [7], oder sehr detailliert in einem Forums-Thread [8], der auf etliche Kandidaten (sowohl Kernel-WakeLocks, diverse Services, als auch für WakeLock-Probleme bekannte Apps) genauer eingeht. Weiterhin lesenswert ist auch ein Artikel bei der Brutzelstube [9], der sich mit Wakelocks und ihren Folgen befasst.