Hängende teilweise Wakelocks

Teilweise Sperren für das Aufwecken sind ein Mechanismus in der PowerManager API, mit dem Entwickler die CPU laufen lassen können, nachdem das Display eines Geräts ausgeschaltet wurde, sei es aufgrund einer Systemzeitüberschreitung oder weil der Nutzer die Ein-/Aus-Taste gedrückt hat. Ihre App erlangt einen Teil-Wakelock, indem sie acquire() mit dem Flag PARTIAL_WAKE_LOCK aufruft. Eine teilweise Aktivierungssperre hängt, wenn sie über einen längeren Zeitraum aktiviert bleibt, während Ihre App im Hintergrund ausgeführt wird (kein Teil Ihrer App ist für den Nutzer sichtbar). Dadurch wird der Akku des Geräts entladen, da es nicht in einen niedrigeren Energiesparmodus wechseln kann. Teilweise Sperren sollten nur bei Bedarf verwendet und sobald nicht mehr erforderlich aufgehoben werden.

Wenn in Ihrer App eine partielle Aktivierungssperre aktiv ist, können Sie das Problem mithilfe der Anleitung auf dieser Seite diagnostizieren und beheben.

Problem erkennen

Sie wissen möglicherweise nicht immer, dass die Teil-Wakelocks Ihrer App hängen. Wenn Sie Ihre App bereits veröffentlicht haben, kann Android Vitals Sie auf das Problem aufmerksam machen.

Android Vitals

Mit Android Vitals können Sie die Leistung Ihrer App verbessern, da Sie über die Play Console benachrichtigt werden, wenn Ihre App nicht vollständig aus dem Ruhemodus aufwacht. In Android Vitals werden Teil-Wakelocks als hängend gemeldet, wenn in einer Akkusitzung mindestens ein einstündiger Teil-Wakelock im Hintergrund auftritt.

Die Definition einer Akkulaufzeit hängt von der Plattformversion ab.

  • In Android 10 ist eine Akkusitzung die Zusammenfassung aller Akkuberichte, die innerhalb eines festgelegten Zeitraums von 24 Stunden empfangen wurden. Ein Akkubericht bezieht sich auf das Intervall zwischen zwei Akkuladungen: entweder von unter 20% bis über 80% oder von einem beliebigen Akkustand bis 100%.
  • Unter Android 11 ist eine Akkusitzung ein fester Zeitraum von 24 Stunden.

Die angezeigte Anzahl der Akkusitzungen ist eine Gesamtzahl für alle gemessenen Nutzer der App. Informationen dazu, wie Google Play Android Vitals-Daten erhebt, finden Sie in der Play Console-Dokumentation.

Wenn Sie festgestellt haben, dass Ihre App zu viele steckengebliebene partielle Aktivierungssperren hat, müssen Sie das Problem beheben.

Problem beheben

Da Aktivierungssperren den Akku des Geräts belasten können, sollten Sie sie nicht verwenden, wenn es eine Alternative gibt. In der Dokumentation Die richtige API auswählen, um das Gerät aktiv zu halten finden Sie Informationen dazu, wie Sie die beste Lösung für Ihre App finden.

Wenn Sie einen Wakelock verwenden müssen, folgen Sie den Best Practices für Wakelocks, damit die Geräteeffizienz nicht beeinträchtigt wird. Achten Sie insbesondere darauf, dass jedes von Ihnen erworbene Gerät entsperrt ist, und heben Sie die Sperre so schnell wie möglich auf.

Nachdem Sie das Problem im Code behoben haben, prüfen Sie mit den folgenden Tools, ob Ihre App die Sperren für die Aktivierung korrekt aufhebt:

  • dumpsys: Ein Tool, das Informationen zum Status der Systemdienste auf einem Gerät liefert. Wenn Sie den Status des Energiediensts mit einer Liste der Sperren für das Aufwecken sehen möchten, führen Sie adb shell dumpsys power aus.

  • Battery Historian: Ein Tool, das die Ausgabe eines Android-Fehlerberichts in eine visuelle Darstellung von energiebezogenen Ereignissen umwandelt.