Ich bin mir nicht sicher, aber nach meinem Wissen teile ich meine Ansichten. Ich akzeptiere immer die beste Antwort, wenn ich falsch liege.
Alarm Manager
Der Alarm Manager hält eine CPU-Wecksperre, solange die onReceive()
Methode des Alarmempfängers ausgeführt wird. Dies garantiert, dass das Telefon erst dann in den Ruhezustand wechselt, wenn Sie die Übertragung abgeschlossen haben. Nach der onReceive()
Rückkehr gibt der Alarm Manager diese Wecksperre frei. Dies bedeutet, dass das Telefon in einigen Fällen in den Ruhezustand wechselt, sobald Ihre onReceive()
Methode abgeschlossen ist. Wenn Ihr Alarmempfänger anruft Context.startService()
, wird das Telefon möglicherweise in den Ruhezustand versetzt, bevor der angeforderte Dienst gestartet wird. Um dies zu verhindern, Ihre BroadcastReceiver
und Service
benötigen eine separate Wake Lock Politik umzusetzen , um sicherzustellen , dass das Telefon läuft weiter , bis der Dienst verfügbar wird.
Hinweis: Der Alarm Manager ist für Fälle vorgesehen, in denen Ihr Anwendungscode zu einem bestimmten Zeitpunkt ausgeführt werden soll, auch wenn Ihre Anwendung derzeit nicht ausgeführt wird. Für normale Timing-Vorgänge (Ticks, Timeouts usw.) ist die Verwendung von Handler einfacher und effizienter.
Timer
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
\\ here your todo;
}
}}, TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(1));
Timer
hat einige Nachteile, die durch gelöst werden ScheduledThreadPoolExecutor
. Es ist also nicht die beste Wahl
ScheduledThreadPoolExecutor .
Sie können java.util.Timer
oder ScheduledThreadPoolExecutor
(bevorzugt) verwenden, um eine Aktion zu planen, die in regelmäßigen Abständen in einem Hintergrundthread ausgeführt wird.
Hier ist ein Beispiel mit letzterem:
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
// call service
}
}, 0, 10, TimeUnit.MINUTES);
Also habe ich es vorgezogen ScheduledExecutorService
Denken Sie aber auch daran, dass Sie, wenn die Aktualisierungen während der Ausführung Ihrer Anwendung erfolgen, a Timer
, wie in anderen Antworten vorgeschlagen, oder die neuere verwenden können ScheduledThreadPoolExecutor
. Wenn Ihre Anwendung auch dann aktualisiert wird, wenn sie nicht ausgeführt wird, sollten Sie sich für das entscheiden AlarmManager
.
Der Alarm Manager ist für Fälle vorgesehen, in denen Ihr Anwendungscode zu einem bestimmten Zeitpunkt ausgeführt werden soll, auch wenn Ihre Anwendung derzeit nicht ausgeführt wird.
Beachten Sie, dass, wenn Sie beim Ausschalten Ihrer Anwendung eine Aktualisierung planen, diese alle zehn Minuten häufig auftritt und daher möglicherweise etwas zu viel Strom verbraucht.