Wakeups sind ein Mechanismus in der AlarmManager
API, mit dem Entwickler einen Alarm festlegen können, um ein Gerät zu einer bestimmten Zeit zu wecken. Deine App richtet einen Weckalarm ein, indem sie eine der set()
-Methoden in AlarmManager
mit dem Flag RTC_WAKEUP
oder ELAPSED_REALTIME_WAKEUP
aufruft. Wenn ein Weckruf ausgelöst wird, verlässt das Gerät den Energiesparmodus und hält einen partiellen Wakelock, während die Methode onReceive()
oder onAlarm()
des Weckers ausgeführt wird. Wenn Weckalarme zu häufig ausgelöst werden, können sie den Akku des Geräts entladen.
Zur Verbesserung der App-Qualität prüft Android Apps automatisch auf übermäßige Wakeup-Alarme und zeigt die entsprechenden Informationen in Android Vitals an. Informationen dazu, wie die Daten erhoben werden, findest du in der Play Console-Dokumentation.
Wenn das Gerät durch deine App übermäßig aktiv wird, kannst du mithilfe der Anleitung auf dieser Seite das Problem diagnostizieren und beheben.
Problem beheben
AlarmManager
wurde in frühen Versionen der Android-Plattform eingeführt. Im Laufe der Zeit wurden jedoch viele Anwendungsfälle, für die zuvor AlarmManager
erforderlich war, durch neuere Funktionen wie WorkManager besser bedient.
Dieser Abschnitt enthält Tipps zur Reduzierung von Weckalarmen. Langfristig solltest du deine App gemäß den Empfehlungen im Abschnitt Best Practices migrieren.
Identifizieren Sie die Stellen in Ihrer App, an denen Sie Weckalarme planen, und reduzieren Sie die Häufigkeit, mit der diese Alarme ausgelöst werden. Hier einige Tipps:
Suchen Sie nach Aufrufen der verschiedenen
set()
-Methoden inAlarmManager
, die entweder das FlagRTC_WAKEUP
oderELAPSED_REALTIME_WAKEUP
enthalten.Wir empfehlen, den Namen des Pakets, der Klasse oder der Methode in den Tag-Namen Ihres Weckers aufzunehmen, damit Sie den Ort in der Quelle leicht identifizieren können, an dem der Alarm gestellt wurde. Hier einige zusätzliche Tipps:
- Lassen Sie alle personenidentifizierbaren Informationen (PII) im Namen weg, z. B. eine E-Mail-Adresse. Andernfalls protokolliert das Gerät
_UNKNOWN
anstelle des Alarmnamens. - Rufen Sie den Klassen- oder Methodennamen nicht programmatisch ab, z. B. durch Aufrufen von
getName()
, da er von Proguard verschleiert werden könnte. Verwenden Sie stattdessen einen hartcodierten String. - Fügen Sie Alarm-Tags keinen Zähler oder eindeutige IDs hinzu. Das System kann so eingestellte Alarme nicht zusammenfassen, da sie alle eindeutige Kennzeichnungen haben.
- Lassen Sie alle personenidentifizierbaren Informationen (PII) im Namen weg, z. B. eine E-Mail-Adresse. Andernfalls protokolliert das Gerät
Prüfen Sie nach der Behebung des Problems, ob Ihre Weckalarme wie erwartet funktionieren. Führen Sie dazu den folgenden ADB-Befehl aus:
adb shell dumpsys alarm
Dieser Befehl liefert Informationen zum Status des Alarmsystemdienstes auf dem Gerät. Weitere Informationen finden Sie unter dumpsys.
Best Practices
Verwenden Sie Wakeup-Alarme nur dann, wenn Ihre App eine an den Nutzer gerichtete Aktion ausführen muss, z. B. eine Benachrichtigung posten oder den Nutzer benachrichtigen muss. Eine Liste der Best Practices für AlarmManager finden Sie unter Alarme planen.
Verwenden Sie AlarmManager
nicht zum Planen von Hintergrundaufgaben, insbesondere wiederkehrende oder Netzwerk-Hintergrundaufgaben. Mit WorkManager können Sie Hintergrundaufgaben planen, da dies folgende Vorteile bietet:
- Batching – Die Aufträge werden kombiniert, um den Akkuverbrauch zu reduzieren.
- Persistenz – wenn das Gerät neu gestartet wird, werden geplante WorkManager-Jobs nach Abschluss des Neustarts ausgeführt.
- Kriterien: Jobs können auf Grundlage bestimmter Bedingungen ausgeführt werden, z. B. ob das Gerät geladen wird oder WLAN verfügbar ist.
Weitere Informationen findest du im Leitfaden zur Hintergrundverarbeitung.
Verwenden Sie AlarmManager
nicht zum Planen von Zeitvorgängen, die nur gültig sind, während die App ausgeführt wird. Der Vorgang sollte also abgebrochen werden, wenn der Nutzer die App schließt. Verwenden Sie in diesen Situationen die Klasse Handler
, da sie einfacher zu verwenden und wesentlich effizienter ist.
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Hängende Teil-Wakelocks
- ANR-Fehler