Wakeups sind ein Mechanismus im
AlarmManager
API, die
können Entwickler einen Wecker stellen, um ein Gerät zu einer bestimmten Zeit zu wecken. Ihre App
richtet einen Wecker ein, indem er eine der set()
-Methoden in
AlarmManager
mit
entweder die
RTC_WAKEUP
oder
ELAPSED_REALTIME_WAKEUP
. Wenn ein Weckruf ausgelöst wird, verlässt das Gerät den Energiesparmodus.
und hält einen partiellen Wakelock, während der Alarm
onReceive()
oder
onAlarm()
. Werden Alarme übermäßig oft ausgelöst, können sie den
Akku.
Damit du die App-Qualität verbessern kannst, prüft Android Apps automatisch auf und zeigt die Informationen in Android Vitals an. Für Informationen dazu, wie die Daten erhoben werden, findest du in der Play Console. Dokumentation.
Wenn das Gerät durch deine App übermäßig aktiviert wird, kannst du die Anleitung unter um das Problem zu diagnostizieren und zu beheben.
Problem beheben
Der AlarmManager
war
in frühen Versionen der Android-Plattform eingeführt, aber im Laufe der Zeit
die früher erforderlich waren,
AlarmManager
sind jetzt
neueren Funktionen wie
WorkManager
Dieser Abschnitt enthält Tipps zum Reduzieren von Weckrufen. Langfristig
Sie sollten Ihre App migrieren, um die Empfehlungen in den bestmöglichen
Best Practices.
Erkenne die Stellen in deiner App, an denen du Weckrufe einstellen und Häufigkeit, mit der diese Alarme ausgelöst werden. Hier einige Tipps:
Suchen Sie nach Aufrufen der verschiedenen
set()
Methoden inAlarmManager
, die enthalten entweder dieRTC_WAKEUP
oderELAPSED_REALTIME_WAKEUP
. .Wir empfehlen, den Namen Ihres Pakets, Ihrer Klasse oder Ihrer Methode im Tag Ihres Weckers anzugeben. Namen, damit Sie die Stelle in Ihrer Quelle leicht identifizieren können, an der die Wecker wurde gestellt. Hier einige zusätzliche Tipps:
- Lassen Sie im Namen alle personenidentifizierbaren Informationen weg, zum Beispiel
eine E-Mail-Adresse. Andernfalls protokolliert das Gerät
_UNKNOWN
anstelle des Alarms Namen. - Sie sollten den Klassen- oder Methodennamen nicht programmatisch abrufen, z. B. durch den Aufruf von
getName()
, weil könnte es von Proguard verschleiert werden. Verwenden Sie stattdessen einen hartcodierten String. - Fügen Sie Alarm-Tags keinen Zähler oder eindeutige IDs hinzu. Das System zeigt keine so eingestellte Alarme aggregieren, da sie alle eindeutige IDs.
- Lassen Sie im Namen alle personenidentifizierbaren Informationen weg, zum Beispiel
eine E-Mail-Adresse. Andernfalls protokolliert das Gerät
Nachdem du das Problem behoben hast, überprüfe, ob deine Weckrufe funktionieren dies wird erwartet, wenn Sie den folgenden ADB-Befehl ausführen Befehl:
adb shell dumpsys alarm
Dieser Befehl liefert Informationen zum Status des Alarmsystemdienstes auf dem Gerät. Weitere Informationen finden Sie unter dumpsys enthält.
Best Practices
Verwende Wakeup-Alarme nur, wenn deine App eine für den Nutzer sichtbare Aktion ausführen muss (z. B. eine Benachrichtigung posten oder den Nutzer benachrichtigen). Eine Liste mit Best Practices für AlarmManager, siehe Planung Wecker.
Nicht verwenden
AlarmManager
bis
Sie planen Hintergrundaufgaben, insbesondere wiederkehrende oder Netzwerkaufgaben. Verwenden Sie
WorkManager
zu planen, da dies folgende Vorteile bietet:
- Batchverarbeitung: Jobs werden kombiniert, um den Akkuverbrauch zu reduzieren.
- Persistenz – nach Neustart des Geräts WorkManager-Jobs geplant nach Abschluss des Neustarts ausführen
- Kriterien: Jobs können basierend auf Bedingungen ausgeführt werden, z. B. danach, ob das Gerät wird geladen oder WLAN ist verfügbar
Weitere Informationen findest du im Leitfaden zur Hintergrundverarbeitung.
AlarmManager
nicht verwenden
um zeitliche Vorgänge zu planen, die nur gültig sind, während die App ausgeführt wird (in
Mit anderen Worten: Der Timing-Vorgang sollte abgebrochen werden, wenn der Nutzer die
App). Verwenden Sie in diesen Fällen die Methode
Handler
-Klasse, weil dieser
einfacher und effizienter nutzen können.
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Hängende Teil-Wakelocks
- ANR-Fehler