Mehrere Bibliotheken und System-APIs können Wake Locks abrufen, die Ihrer App zugeordnet werden. Dadurch kann es schwierig sein, ein Wake Lock in Ihrer App zu identifizieren, das möglicherweise ein Problem verursacht. Wenn Sie eine API missbrauchen, kann es sein, dass Ihre App einen Wake Lock zu lange hält, obwohl Sie die Wake Lock-APIs nicht direkt aufrufen.
In diesem Dokument sind einige gängige Namen für Wake Locks aufgeführt, die Sie bei der Verwendung der Wake Lock-Debugging-Tools sehen können. Möglicherweise werden diese Namen auch in einem Bericht von Android Vitals angezeigt. In einigen Fällen wurde der Wake Lock möglicherweise von einer Bibliothek oder System-API erstellt. In anderen Fällen gibt es einen Grund dafür, dass das Tool den Namen des Wake Locks, den Sie in der App verwenden, verschleiert. Sie können die Debugging-Tools verwenden, um fehlerhafte Wake Locks zu identifizieren, und dann in diesem Dokument nach dem Namen des Wake Locks suchen, um herauszufinden, welche API das Problem verursacht und wie Sie es beheben können.
In diesem Dokument werden die Szenarien beschrieben, in denen Wake Locks erstellt werden können. In jedem Fall wird das Wake Lock, auch wenn es von einer anderen Bibliothek oder API erstellt wurde, der App zugeordnet, die diese API aufgerufen hat.
AlarmManager
- Audio und Medien
- Firebase Cloud Message (FCM)
- JobScheduler
- deinen Standort zugegriffen haben
- WorkManager
_UNKNOWN
: Wird von Debugging-Tools angezeigt, wenn der Name des Wake Locks personenidentifizierbare Informationen (PII) zu enthalten scheint.
AlarmManager
AlarmManager
ruft Wake Locks ab und weist sie der aufrufenden App zu. AlarmManager
ruft den Wake Lock ab, wenn der Alarm ausgelöst wird, und gibt ihn frei, wenn die Ausführung der Methode onReceive()
des Alarm-Broadcasts abgeschlossen ist.
Wakelock-Namen
AlarmManager
erstellt Wake Locks mit dem Namen *alarm*
. Die Sternchen sind Teil des Namens des Wake Locks und keine Platzhalter.
Empfehlung
Wir empfehlen die folgenden Vorgehensweisen, um das Verhalten von Benachrichtigungen zu optimieren:
- Verwenden Sie
AlarmManager
, um die Häufigkeit der Alarmplanung zu optimieren. - Verwenden Sie
RTC_WAKEUP
-Wecker (die das Gerät aktivieren) nur, wenn es unbedingt erforderlich ist. - Verwenden Sie Alarme nur sparsam und vermeiden Sie es, in der Methode
onReceive()
lange Vorgänge auszuführen.
Audio und Medien
Media-APIs können Wake Locks beim Aufzeichnen oder Wiedergeben von Audioinhalten abrufen. Die Wake Locks werden der Anruf-App zugeordnet.
Wakelock-Namen
Media APIs erhalten Wakelocks mit verschiedenen Namen, die mit Audio
beginnen:
AudioBitPerfect
: Wird für die verlustfreie USB-Audiowiedergabe verwendet.AudioDirectOut
: Wird für die verlustfreie Audiowiedergabe auf einem Fernseher oder einem speziellen Gerät verwendet.AudioDup
: Wird für die Wiedergabe von Benachrichtigungen verwendet, wenn eine Verbindung über Bluetooth oder USB besteht.AudioIn
: Wird für die Audioaufnahme im Camcorder-Modus verwendet, wenn das Mikrofon aktiv ist.AudioMix
: Wird für die Audiowiedergabe auf einem gemeinsamen Gerät verwendet.AudioOffload
: Wird für die langfristige reine Musikwiedergabe in Apps verwendet, die diesen Modus unterstützen.AudioSpatial
: Wird für die Wiedergabe von Mehrkanal-Audio für Filme oder Musik auf Geräten verwendet, die Raumklang unterstützen.AudioUnknown
: Wird verwendet, wenn die anderen Situationen nicht zutreffen.MmapCapture
: Wird für die Audioaufnahme mit geringer Latenz verwendet.MmapPlayback
: Wird für die Wiedergabe mit geringer Latenz verwendet, z. B. für Spiele oder professionelle Audioanwendungen.
Empfehlung
Wir empfehlen Folgendes:
- Verwenden Sie keine Wakelock-Namen, die mit
Audio
beginnen. - Wenn Sie die Media APIs verwenden, müssen Sie keine Wake Locks direkt abrufen. Die APIs rufen die erforderlichen Wake Locks für Sie ab.
- Wenn Sie Media APIs verwenden, beenden Sie die Mediensitzung, wenn Sie sie nicht mehr benötigen.
Firebase Cloud Messaging (FCM)
GCM ruft ein Wake Lock ab, während eine Firebase Cloud Message (FCM) an die App gesendet wird. Das Wake Lock wird freigegeben, sobald die Ausführung der Methode onMessageReceived()
abgeschlossen ist.
Wakelock-Namen
GCM ruft einen Wake Lock mit dem Namen GOOGLE_C2DM
ab.
Empfehlung
Wir empfehlen die folgenden Vorgehensweisen, um das Verhalten von FCM zu optimieren:
- Häufigkeit der FCM-Zustellung optimieren
- Verwenden Sie FCM mit hoher Priorität nur, wenn die Nachricht tatsächlich sofort zugestellt werden muss.
- Lassen Sie die
onMessageReceived()
-Methode so schnell wie möglich durchführen. Weitere Informationen finden Sie in den Firebase-Richtlinien.
JobScheduler
JobScheduler-Jobs erhalten Wakelocks, während Aufgaben im Hintergrund ausgeführt werden. Die Wake Locks werden der App zugeordnet, die die Worker erstellt hat.
Wakelock-Namen
Die von JobScheduler abgerufenen Wake-Lock-Namen hängen von der Android-Systemversion ab, auf der sie ausgeführt werden, und vom Zweck des Jobs.
Die Elemente in spitzen Klammern sind Variablen. Beispiel: „<package_name>“ ist der Name des App-Pakets und nicht der Literaltext <package name>
. *job*
ist jedoch die Zeichenfolge *job*
mit Sternchen. Die Sternchen werden nicht als Platzhalter verwendet.
Android 15 und niedriger
Bei vom Nutzer initiierten Jobs werden Wake Locks mit Namen erstellt, die diesem Muster folgen:
*job*u/@<name_space>@/<package_name>/<classname>
Dieses Muster wird auch in anderen Jobs verwendet:
*job*/@<name_space>@/<package_name>/<classname>
Android 16 und höher
Bei vom Nutzer initiierten Jobs werden Wake Locks mit Namen erstellt, die diesem Muster folgen:
*job*u/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
Bei Express-Jobs wird dieses Muster verwendet:
*job*e/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
Bei regulären Jobs wird dieses Muster verwendet:
*job*r/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
Beispiel
Angenommen, es gibt einen beschleunigten Job mit dem Namespace backup
und dem Trace-Tag started
. Der Paketname ist com.example.app
und die Klasse, die den Job erstellt hat, ist com.backup.BackupFileService
.
Auf Geräten mit Android 15 oder niedriger hat das Wake Lock folgenden Namen:
*job*/@backup@/com.example.app/com.backup.BackupFileService
Auf Geräten mit Android 16 oder höher würde das Wake Lock so benannt:
*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService
Empfehlung
Prüfen Sie die Verwendung von JobScheduler-Aufgaben. Beachten Sie insbesondere unsere Richtlinien zur Optimierung der Akkunutzung für APIs zur Aufgabenplanung.
Standort
LocationManager
und FusedLocationProviderClient
verwenden Wake Locks, um den Gerätestandort zu ermitteln und bereitzustellen. Die Wake Locks werden der App zugeordnet, die diese APIs aufgerufen hat.
Wakelock-Namen
Standortdienste verwenden die folgenden Namen:
CollectionLib-SigCollector
NetworkLocationLocator
NetworkLocationScanner
NlpCollectorWakeLock
NlpWakeLock
*location*
Empfehlung
Standortnutzung optimieren Sie können beispielsweise Zeitüberschreitungen festlegen, Standortanfragen in Batches zusammenfassen oder passive Standortaktualisierungen verwenden.
WorkManager
WorkManager-Worker rufen Wakelocks ab, während sie Aufgaben im Hintergrund ausführen. Die Wake Locks werden der App zugeordnet, die die Worker erstellt hat.
Wakelock-Namen
Die von WorkManager abgerufenen Wake-Lock-Namen hängen von der Android-Systemversion ab, auf der sie ausgeführt werden.
Android 15 und niedriger
WorkManager-Aufgaben erstellen Wake Locks mit Namen, die diesem Muster folgen:
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 und höher
Für beschleunigte Aufgaben werden Wake Locks mit Namen erstellt, die diesem Muster folgen:
*job*e/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Regelmäßige Aufgaben folgen diesem Muster:
*job*r/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Standardmäßig ist <trace_tag>
der Name des Workers.
Beispiel
Angenommen, es gibt einen beschleunigten Worker namens BackupFileWorker
. Der Paketname lautet com.example.app
.
Auf Geräten mit Android 15 oder niedriger hat das Wake Lock folgenden Namen:
*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
Auf Geräten mit Android 16 oder höher würde das Wake Lock so benannt:
*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
Empfehlung
Prüfen Sie die Verwendung von WorkManager-Workern. Beachten Sie insbesondere unsere Richtlinien zur Optimierung der Akkunutzung für APIs zur Aufgabenplanung.
_UNKNOWN
Wenn die Debugging-Tools der Meinung sind, dass ein Wake Lock-Name personenidentifizierbare Informationen enthält, wird der tatsächliche Wake Lock-Name nicht angezeigt. Stattdessen wird das Wake Lock als _UNKNOWN
gekennzeichnet. Das kann beispielsweise passieren, wenn der Wake-Lock-Name eine E-Mail-Adresse enthält.
Empfehlung
Befolgen Sie die Best Practices für die Benennung von Wakelocks und vermeiden Sie die Verwendung von personenidentifizierbaren Informationen im Wakelock-Namen. Wenn Sie einen Wake Lock mit dem Namen _UNKNOWN
finden, der Ihrer App zugeordnet ist, versuchen Sie, ihn zu identifizieren und ihm einen anderen Namen zu geben.