2016-07-29 13 views
1

TimerTask läuft noch einmal nach dem Aufruf der Methode timer.cancel(). Ich brauche TimerMethod nicht ausgeführt werden, nachdem ich stopBusTimer() -Methode aufrufen.TimerTask läuft noch einmal nach dem Aufruf von timer.cancel() Methode

Kann jemand erklären, warum es passiert?

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"); 
    } 
} 

Antwort

3

Die cancel Methode werden alle folgenden Ausführungen stoppen, aber nicht die aktuelle. Es dauert eine lange Zeit, bis Ihre Methode ausgeführt wird. Wenn Sie cancel aufrufen, kann die Methode bereits ausgeführt werden.

Die beste Methode, um sicherzustellen, dass die Methode nicht ausgeführt wird, besteht darin, cancel innerhalb der run()-Funktion selbst aufzurufen.

+0

Danke für die Antwort. Ich habe verstanden, wie es funktioniert. Jetzt muss ich herausfinden, wie ich die HTprequest abbrechen kann, die ich innerhalb der Funktion run() sende. –