2011-06-21 18 views
8

CountDownTimer.cancel() nie działa w poniższym kodzie:CountDownTimer.cancel() nie działa w Androidzie

myTimer = new CountDownTimer(10000, 1000) { 
    public void onFinish() { 
    } 
    @Override 
    public void onTick(long millisUntilFinished) { 
     if(null != myObject){ 
      myTimer.cancel(); 
     } 
    } 
}.start(); 

W powyższym kodzie Zacząłem CountDownTimer które sprawdzają, czy obiekt nie jest null i anuluje Timer odpowiednio. Obiekt jest ustawiony przez jakiegoś słuchacza w dowolnym momencie. Proszę odnieść się i zasugerować. Czy robię to, co trzeba?

Rozwiązanie Przez Gautier Hayoun:

Wystarczy zanotował spadek zamiennik dla CountDownTimer że można anulować od wewnątrz onTick: Github link - Gautier Hayoun Dec 12 '10 na 1:04

+0

problem może być, że odwołujesz się do 'myTimer' wewnątrz nowo utworzonego obiektu. Wypróbuj 'this.cancel();' zamiast 'myTimer.cancel();'. – Pit

+1

czy to błąd Androida? Jestem naprawdę sfrustrowany z tego powodu. –

Odpowiedz

9

Rozwiązanie Przez Gautier Hayoun:

Wystarczy zanotował spadek w zastępstwie CountDownTimer, że można zrezygnować z wewnątrz onTick: Github link - Gautier Hayoun 12 grudnia '10 w 1:04

+0

. W tym przypadku handler ostrzega: "Ta klasa obsługi powinna być statyczna lub mogą wystąpić przecieki". Przeczytaj: http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-lub-leaks-might-occur-incominghandler –

5

Zamiast CountDownTimer używać TimerTask

final static long INTERVAL=1000; 
final static long TIMEOUT=10000; 


TimerTask task=new TimerTask(){ 
      @Override 
      public void run() { 
       elapsed+=INTERVAL; 
       if(elapsed>=TIMEOUT){ 
        this.cancel(); 
        displayText("finished"); 
        return; 
       } 
       //if(some other conditions) 
       // this.cancel(); 
       displayText("seconds elapsed: " + elapsed/1000); 
      } 
     }; 
Timer timer = new Timer(); 
timer.scheduleAtFixedRate(task, INTERVAL, INTERVAL); 

private void displayText(final String text){ 
    this.runOnUiThread(new Runnable(){ 
     @Override 
     public void run() { 
      mTextField.setText(text); 
     } 
    }); 
} 
+2

Co to jest probem w odliczaniu? –

+1

CountDown ma pewne problemy z anulowaniem, zwykle jeśli wywołasz cancel() nie zostanie zatrzymany i będziesz miał 2 timery pracujące w tym samym czasie –

Powiązane problemy