Kann mir jemand den Unterschied zwischen AlarmManager.RTC_WAKEUP
und erklären AlarmManager.ELAPSED_REALTIME_WAKEUP
? Ich habe die Dokumentation gelesen, verstehe aber immer noch nicht wirklich die Auswirkungen der Verwendung übereinander.
Beispielcode:
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
scheduledAlarmTime,
pendingIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP,
scheduledAlarmTime,
pendingIntent);
Wie unterschiedlich werden die beiden Codezeilen ausgeführt? Wann werden diese beiden Codezeilen relativ zueinander ausgeführt?
Ich schätze Ihre Hilfe.
quelle
System.currentTimeMillis()
anstelle von sein sollteSystem.currentTimeMills()
:)thirtySecondsFromNow
.Trotz der derzeit akzeptierten und hochgestimmten Antwort waren die Typen AlarmManager.ELAPSED_REALTIME * zusammen mit SystemClock.elapsedRealtime () immer zuverlässiger als die RTC-Uhren für Alarme und Timing.
Die Verwendung von ELAPSED_REALTIME_WAKEUP mit AlarmManager basiert auf einer monotonen Uhr ab dem Startzeitpunkt " und tickt auch dann weiter, wenn sich die CPU im Energiesparmodus befindet. Dies ist die empfohlene Grundlage für das allgemeine Intervall-Timing ". So,
Ihr PendingIntent wird in 1 Minute (60 * 1000 Millisekunden) ausgelöst.
Während AlarmManager.RTC_WAKEUP für die Standard- "Wand" -Zeit in Millisekunden seit der Epoche ist. So,
kann den Alarm auch in 60 Sekunden auslösen, jedoch nicht zuverlässig, da wie in der SystemClock-Dokumentation angegeben :
Außerdem bezog sich die Frage nur auf die * _WAKEUP-Alarme, aber lesen Sie auch die AlarmManager- Dokumentation dazu, um sicherzustellen, dass Sie verstehen, was die Weck- und Nicht-Weck-Alarme bieten.
quelle
elapsedRealtime()
unterSystemClock
stattSystem
. EDIT: ... Tägliches Abstimmungslimit erreicht ...Nur eine Notiz. Sie können die Verfügbarkeit Millis anrufen:
Wenn Sie also in 30 Sekunden den Alarm auslösen und die Betriebszeit anstelle der normalen Uhr verwenden möchten, können Sie Folgendes tun:
Wenn Sie anstelle eines bestimmten Datums / einer bestimmten Uhrzeit nach einer verstrichenen Zeit suchen möchten, verwenden Sie am besten die Verfügbarkeit. Dies liegt daran, dass sich die vom Benutzer im Gerät festgelegte aktuelle Zeit ändern kann, wenn der Benutzer sie mithilfe der Einstellungen ändert.
quelle
Ich habe dieses Problem in meinem eigenen Projekt so programmiert. im folgenden Code verwende ich
Alarm zu einer bestimmten Zeit einstellen. Die Variable 'intentName' wird im intentFilter verwendet, um diesen Alarm zu empfangen. weil ich viele Alarme dieser Art abfeuere. wenn ich alle Alarme abbreche. Ich benutze die Methode Abbrechen. unten angegeben.
// um Alarme zu halten und bei Bedarf abzubrechen
// //
Wo ist die Span-Funktion:
Alarmabbruchfunktion ist dies.
quelle
Einige wichtige Hinweise bei der Auswahl des zu verwendenden Alarms : (für wen, der die Stimmen bereits gelesen hat)
Das
RTC_WAKEUP
Todestal - Zeitänderung:Wenn der Benutzer die Zeit manuell in die Vergangenheit geändert hat, wird der Alarm nicht ausgelöst, und in Zukunft wird der Alarm sofort ausgelöst, wenn er den
RTC
Zeitstempel überschreitet.Sie nicht verwenden Sie diesen Alarm alle Client - Seite Überprüfung / wichtige Aufgaben zu tun , weil es eine Chance zu scheitern haben.
Die
WAKEUP
Bedeutung (Marshmallow und höher)Im Allgemeinen - nicht viel. Weckt das Gerät nicht auf, wenn
idle
oder während es indoze
, dafüralarmManager.setExactAndAllowWhileIdle
oderalarmManager.setAndAllowWhileIdle
( Doze & Idle )quelle