Non ne sono sicuro, ma per quanto ne so condivido le mie opinioni. Accetto sempre la migliore risposta se sbaglio.
Gestore allarmi
L'Alarm Manager mantiene un wakelock della CPU fintanto che il onReceive()metodo del ricevitore dell'allarme è in esecuzione. Ciò garantisce che il telefono non dormirà finché non avrai finito di gestire la trasmissione. Una volta onReceive()restituito, il gestore degli allarmi rilascia questo wakelock. Ciò significa che in alcuni casi il telefono dormirà non appena il onReceive()metodo sarà completato. Se il ricevitore della sveglia ha chiamato Context.startService(), è possibile che il telefono dorma prima che venga avviato il servizio richiesto. Per evitare questo, il vostro BroadcastReceivere Servicesarà necessario attuare una politica di blocco scia separato per garantire che il telefono continua a funzionare fino a quando il servizio diventa disponibile.
Nota: Gestione allarmi è concepito per i casi in cui si desidera che il codice dell'applicazione venga eseguito in un momento specifico, anche se l'applicazione non è attualmente in esecuzione. Per le normali operazioni di temporizzazione (tick, timeout, ecc.) È più facile e molto più efficiente utilizzare Handler.
Timer
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
\\ here your todo;
}
}}, TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(1));
Timerpresenta alcuni inconvenienti che vengono risolti da ScheduledThreadPoolExecutor. Quindi non è la scelta migliore
ScheduledThreadPoolExecutor .
È possibile utilizzare java.util.Timero ScheduledThreadPoolExecutor(preferito) per pianificare un'azione da eseguire a intervalli regolari su un thread in background.
Ecco un esempio che utilizza quest'ultimo:
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
// call service
}
}, 0, 10, TimeUnit.MINUTES);
Quindi ho preferito ScheduledExecutorService
Ma pensa anche che se gli aggiornamenti si verificheranno mentre la tua applicazione è in esecuzione, puoi usare un Timer, come suggerito in altre risposte, o il più recente ScheduledThreadPoolExecutor. Se la tua applicazione si aggiornerà anche quando non è in esecuzione, dovresti andare con il AlarmManager.
L'Alarm Manager è inteso per i casi in cui si desidera che il codice dell'applicazione venga eseguito in un momento specifico, anche se l'applicazione non è attualmente in esecuzione.
Tieni presente che se prevedi di eseguire l'aggiornamento quando l'applicazione è spenta, una volta ogni dieci minuti è abbastanza frequente e quindi potrebbe consumare un po 'troppo.