Desidero eseguire alcune attività (ad esempio ottenere la pagina delle notizie del mio sito Web) periodicamente (una volta alla settimana/un giorno), anche se la mia domanda è chiusa. È possibile?Esecuzione periodica dell'attività (una volta al giorno/una volta alla settimana)
risposta
Sì, è necessario controllare AlarmManager per impostare un "allarme" ricorrente. Questo è meglio per la durata della batteria del dispositivo, poiché a differenza di un servizio non viene eseguito costantemente in background. L'allarme attiva uno broadcast receiver che eseguirà il codice personalizzato.
Come nota finale, ci sono valori di enumerazione per i tempi dell'allarme inclusi giornaliero, metà giornaliero e molti altri anche se è possibile semplicemente impostare un valore reale.
Un buon esempio può essere trovato nel follow SO postale:
Aggiornamento
più recente funzionalità sono state aggiunte ad Android. Se stai leggendo questo, ti consiglierei di guardare in GcmNetworkManager. Questo ottimizza la durata della batteria e funziona pre-lollipop. Per Lollipop in poi è possibile utilizzare JobScheduler. Consiglierei di usare queste classi su AlarmManager.
Come alternativa sto paragonando la settimana in corso:
Calendar cal = Calendar.getInstance();
int currentWeekOfYear = cal.get(Calendar.WEEK_OF_YEAR);
SharedPreferences sharedPreferences= this.getSharedPreferences("appInfo", 0);
int weekOfYear = sharedPreferences.getInt("weekOfYear", 0);
if(weekOfYear != currentWeekOfYear){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("weekOfYear", currentWeekOfYear);
editor.commit();
// Your once a week code here
}
Non sto sostenendo questo è meglio che la soluzione di allarme. Sto solo mostrando un approccio diverso.
Penso che la soluzione migliore sia GcmNetworkManager. Fondamentalmente ha tutto ciò di cui hai bisogno da AlarmManager e persistenza, quindi il lavoro può continuare l'esecuzione dopo il riavvio.
Esempio:
PeriodicTask task = new PeriodicTask.Builder()
.setService(MyTaskService.class)
.setTag(TASK_TAG_PERIODIC)
.setPeriod(5L)
.build();
mGcmNetworkManager.schedule(task);
Hai ragione - probabilmente questo diventerà il modo normale di farlo. Ho scritto la mia risposta 2,5 anni fa, quindi le cose vanno avanti. Direi che è necessario aggiungere il Job Scheduler di Lollipop per Android 5+ poiché NON DEVI usare il 'GcmNetworkManager'. Ho svitato btw. –
- 1. Esegui attività una volta a settimana su Heroku
- 2. codice Javascript in esecuzione una volta
- 3. MapView - Appaiono le annotazioni una alla volta
- 4. Come sfumare/rivelare una lettera alla volta?
- 5. PHP che serve una pagina alla volta
- 6. dirigere una massa di nemici alla volta
- 7. Leggere una stringa, caratteri 3x3 alla volta
- 8. Solo un thread alla volta!
- 9. Sostituire più sottostringhe alla volta
- 10. tick DispatcherTimer una volta
- 11. carica show_ads.js una volta
- 12. javascript aggiungi un minuto alla volta oggetto
- 13. Stile di commit Git: tutti i file modificati in una volta o uno alla volta?
- 14. Come animare un set di oggetti jQuery uno alla volta (anziché tutti in una volta)
- 15. Come limitare gli eventi che si attivano più di una volta alla volta
- 16. Come eseguire il codice nel servizio C# una volta al giorno alla stessa ora?
- 17. dojo.dnd un articolo alla volta solo
- 18. Hadoop legge più righe alla volta
- 19. PHP include una volta
- 20. jQuery - Solo una volta
- 21. Come arrotondare una volta?
- 22. Compilare condizionatamente solo un modulo alla volta
- 23. errore in esecuzione cpan la prima volta
- 24. Esegui setUp solo una volta
- 25. Javascript: esecuzione dell'azione una volta caricata la pagina successiva?
- 26. VBA Excel: aggiungi un secondo alla volta
- 27. Decrementa una variabile una volta al giorno - Javascript
- 28. righe di lettura 2 alla volta
- 29. Come inserire 1000 righe alla volta
- 30. Python per l'accesso alla rete due elementi alla volta
Grazie, questo è esattamente quello che stavo cercando. – siemian
@Graham Smith Di interesse, hai scritto il tuo? –
@Graham Smith Il link che hai fornito è rotto. Puoi fornire un link di lavoro? – Zapnologica