2016-07-29 1 views
1

TimerTask s'exécute une fois de plus après l'appel de la méthode timer.cancel(). Je n'ai pas besoin que TimerMethod soit exécuté après l'appel de la méthode stopBusTimer(). Est-ce que quelqu'un peut expliquer pourquoi cela se passe-t-il?TimerTask s'exécute une fois de plus après l'appel de la méthode timer.cancel()

busTimer = new Timer(); 
    busTimer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      TimerMethod(mSelectedRoute); 
     } 
    }, 0, Consts.BUS_TIMER_INTERVAL); 


private void stopBusTimer() { 
    if (busTimer != null) { 
     busTimer.cancel(); 
     busTimer.purge();  
     busTimer = null; 
     Log.v(LOG_TAG, "stop BusTimer"); 
    } 
} 

Répondre

3

La méthode cancel arrêtera toutes les exécutions suivantes, mais pas celui en cours. Si l'exécution de votre méthode prend beaucoup de temps, alors il est possible au moment où vous appelez cancel, la méthode a déjà commencé à s'exécuter.

La meilleure façon de s'assurer que la méthode ne s'exécute pas est d'appeler cancel à partir de la fonction run() elle-même.

+0

Merci pour la réponse. J'ai compris comment ça fonctionne. Maintenant, j'ai besoin de comprendre comment annuler la requête http que je vous envoie dans la fonction run(). –