Android run thread en service de toutes les X secondes
Je veux créer un thread dans un Android service qui s'exécute toutes les X secondes
Je suis en train d'utiliser , mais le postdelayed méthode semble vraiment à la traîne mon application.
@Override
public int onStartCommand(Intent intent, int flags, int startId){
super.onStartCommand(intent, flags, startId);
startRepeatingTask();
return startId;
}
private final static int INTERVAL = 20000; //20 milliseconds
Handler m_handler = new Handler();
Runnable m_handlerTask = new Runnable()
{
@Override
public void run() {
//this is bad
m_handler.postDelayed(m_handlerTask, INTERVAL);
}
};
void startRepeatingTask()
{
m_handlerTask.run();
}
void stopRepeatingTask()
{
m_handler.removeCallbacks(m_handlerTask);
stopSelf();
}
Je veux faire un nouveau thread comme celui-ci:
public void threadRun()
{
Thread triggerService = new Thread(new Runnable(){
public void run(){
Looper.prepare();
try{
//do stuff here?
}catch(Exception ex){
System.out.println("Exception in triggerService Thread -- "+ex);
}//end catch
}//end run
}, "aThread");
triggerService.start();
//perhaps do stuff here with a timer?
timer1=new Timer();
timer1.scheduleAtFixedRate(new methodTODOSTUFF(), 0, INTERVAL);
}
Je ne suis pas sûr de la meilleure façon de faire un thread d'arrière-plan à exécuter à un certain intervalle, la perspicacité apprécié!
OriginalL'auteur CQM | 2011-11-22
Vous devez vous connecter pour publier un commentaire.
Il existe plusieurs méthodes pour ce faire. Personnellement, je préfère utiliser ScheduledExecutorService:
Salut j'utilise et ça marche très bien, mais comment puis-je arrêter la tâche?
utiliser les scheduleTaskExecutor.shutdownNow()
peut-il fonctionner même lorsque l'application est fermée?
Méfiez-vous,
TimeUnit.MINUTES
n'est pas garanti pour exister sur AndroidOriginalL'auteur
Ici est la façon dont je dirige une répétition de fil, comme vous allez le voir en boucle toutes les 1 seconde. Je vois pas de décalage avec cette méthode.
Et de la classe:
OriginalL'auteur
MyService.java
MainActivity.java
Ajouter le code suivant dans
AndroidManifest.xml
AndroidManifest.xml
L'astuce ici est d'utiliser le Service et de mettre en œuvre une Minuterie en marche un TimerTask pour un intervalle. Mon exemple ici, c'est que j'ai des Toasts et du Temps dans toutes les 5 secondes
OriginalL'auteur
De départ d'une
runnable
toutes les quelques secondes va avoir un peu de lag n'importe quelle manière vous la coupez, non? Je ne vois pas pourquoi unHandler
ne devrait pas fonctionner correctement.Vous pourriez être confronté à certains problèmes, mais parce que vous avez
Au lieu de cela, vous devez utiliser le Gestionnaire et faire quelque chose comme:
(En aparté, la convention de Java est d'utiliser chameau cas, pas de serpent de cas. Il devrait donc être mHandler, pas m_handler, etc. Juste vous dire car cela risque de rendre votre code plus facile à lire pour certains.)
OriginalL'auteur