2011-03-09 3 views
1

Je dois mettre en œuvre un service qui doit effectuer périodiquement une tâche courte. J'ai utilisé le gestionnaire avec sendmessagedelayed pour implémenter la boucle. Cela fonctionne mais y a-t-il un meilleur moyen?Boucle de mise en œuvre

@Override 
    public boolean handleMessage(Message arg0) { 
     //do something 
     Message msgtx=Message.obtain(); 
     handler.sendMessageDelayed(msgtx, updaterate); 
     return true; 
    } 

Répondre

3

Si la tâche est exécutée, disons, chaque X minutes ou plus, en utilisant un gestionnaire est OK. Si le délai entre l'exécution des tâches est plus grande (heure environ), je recommande d'utiliser le AlarmManager:

long now = System.currentTimeMillis(); 
long interval = XXX;// time in milisecs for the next execution 
Intent i = new Intent(); 
i.setClass(this, YourService.class); 
i.setAction("some_action_to_indicate_the_task"); 
PendingIntent pi = PendingIntent.getService(this, 0, i, 0); 
AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmMgr.set(AlarmManager.RTC_WAKEUP, now + interval, pi); 
1

Si vous voulez que cette tâche soit exécutée, même si votre application ne fonctionne pas, en utilisant AlarmManager. Si vous souhaitez l'exécuter uniquement lorsque votre application est en cours d'exécution, il est préférable d'utiliser un gestionnaire.

doc Android dit:

Note: Le gestionnaire d'alarme est prévu pour les cas où vous voulez avoir votre code d'application exécutée à un moment précis, même si votre application ne fonctionne actuellement. Pour les opérations de synchronisation normales (ticks, timeouts, etc.), il est plus facile et plus efficace d'utiliser Handler.