Il modo migliore per avere periodicamente un’app per Android in background

Prendi l’app Gmail come esempio. Indipendentemente dal fatto che il telefono sia acceso, esegue il polling ogni 10 minuti circa per scaricare nuove e-mail che potrebbero essere arrivate dall’ultima verifica.

So come creare un nuovo servizio e legarlo ad esso. Ma posso vedere alcuni modi per realizzare questo:

  • Effettua il binding una sola volta e fai girare il servizio in un ciclo infinito, dormendo per 10 minuti tra ogni ciclo
  • Bind e unbind giusto quando è finito, programmando il prossimo bind in qualche modo in 10 minuti
  • Utilizzo della class AlarmManager per pianificare sondaggi futuri

Quali sono gli scambi commerciali? Come si realizza l’app Gmail?

Grazie!

L’app Gmail utilizza il push, non il polling. Suggerisco invece di usare questa tecnica, il polling è un killer della batteria nei dispositivi mobili.

Per implementare la spinta, dai un’occhiata a C2DM .

Se si desidera eseguire il polling, si consiglia di impostare un allarme periodico in AlarmManager.

AGGIORNAMENTO : Google ha ritirato C2DM e l’ha sostituito con Google Cloud Messaging (GCM)

AGGIORNAMENTO : Google ha ritirato GCM e lo ha sostituito con Firebase Cloud Messaging (FCM)

  • Per un sondaggio continuo, ma non intenso come quello che commentate (nell’intervallo di minuti tra i sondaggi), lo implementerei con AlarmManager. In questo modo ti assicuri che il telefono si risvegli al sondaggio senza la necessità di un wakelock, che distruggerebbe la batteria. Come indicato da CommonsWare, sarà comunque necessario implementare un wakelock per il periodo di esecuzione del codice, ma è ansible rilasciarlo non appena il codice è terminato, evitando di tenere il telefono acceso mentre si sta solo aspettando. Vedi il suo commento per un esempio su come implementarlo.

  • Vorrei utilizzare un servizio se, invece, hai bisogno di sondaggi più rapidi durante un periodo di tempo più breve (secondi tra ogni sondaggio), poiché impostare allarmi non ha senso per periodi così brevi, e la batteria si drenerebbe comunque.