Je veux exécuter une tâche (c'est-à-dire obtenir la page d'actualités de mon site Web) périodiquement (une fois par semaine/par jour), même si mon application est fermée. C'est possible?
Oui, vous devez regarder AlarmManager pour configurer une "alarme" récurrente. C'est mieux pour la durée de vie de la batterie de l'appareil, car contrairement à un service, il ne fonctionne pas constamment en arrière-plan. L'alarme déclenche un récepteur de diffusion qui exécutera votre code personnalisé.
En guise de note finale - il existe des valeurs d'énumération pour le moment de l'alarme, y compris quotidiennement, demi-quotidiennement et bien d'autres encore, bien que vous puissiez simplement définir une valeur réelle.
Un bon exemple peut être trouvé dans le message suivant SO post:
Exemple de gestionnaire d'alarmes
Mise à jour
De nouvelles fonctionnalités ont été ajoutées à Android. Si vous lisez ceci, je vous conseillerais maintenant de regarder GcmNetworkManager . Cela optimise la durée de vie de la batterie et fonctionne avant Lollipop. Pour Lollipop, vous pouvez utiliser JobScheduler . Je conseillerais d'utiliser ces classes sur AlarmManager.
Je pense que le meilleur ajustement est GcmNetworkManager . Fondamentalement, il contient tout ce dont vous avez besoin depuis AlarmManager plus la persistance, de sorte que le travail peut continuer à s'exécuter après le redémarrage.
Exemple:
PeriodicTask task = new PeriodicTask.Builder()
.setService(MyTaskService.class)
.setTag(TASK_TAG_PERIODIC)
.setPeriod(5L)
.build();
mGcmNetworkManager.schedule(task);
Comme alternative, je compare la semaine en cours:
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
}
Je ne préconise pas que c'est mieux que la solution Alarm. Je montre juste une approche différente.