2010-06-29 30 views
17

Extiendo la clase CountDownTimer para obtener algunas funcionalidades personalizadas. En onTick() en caso de que se cumplan algunas condiciones, llamo a cancel(), esperando que sea el final, sin embargo el La devolución de llamada onTick() recibe una llamada hasta que se alcanza la cuenta regresiva. Entonces, ¿cómo evitar que esto suceda?cómo detener/cancelar android CountDownTimer

Respuesta

18

El método CountDownTimer.cancel() parece no funcionar. Aquí hay otro hilo sin una solución Timer does not stop in android.

Yo le recomendaría usar el temporizador en su lugar. Es mucho más flexible y se puede cancelar en cualquier momento. Puede ser algo así:

public class MainActivity extends Activity {  
    TextView mTextField; 
    long elapsed; 
    final static long INTERVAL=1000; 
    final static long TIMEOUT=5000; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mTextField=(TextView)findViewById(R.id.textview1); 

     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); 
      }}); 
    } 
} 
+4

acaba de hacer una gota en el reemplazo para countDownTimer que se puede cancelar desde dentro onTick: https://gist.github.com/737759 –

+0

@GautierHayoun Por que el método que puedo cancelar en onTick, pero el onTick () todavía se llamará, no sé por qué – Deqing

15

countDownTimer también está trabajando muy bien para mí, pero creo que sólo funciona si se llama fuera de la Implementación countDownTimer (es decir no lo llaman en el onTick).

Llamar al interior tampoco funcionó.

+3

Sí, llamando no funciona. Llamé forzosamente a Finalizar e intenté cancelar la cuenta atrás dentro de Finish y funcionó – Basher51

0

He intentado este fragmento de código, ya que la mayoría de las respuestas dicen que no se puede cancelar el temporizador dentro de su implementación, así que traté de usar un controlador dentro de Finish. Publicación anterior, pero si alguien se encuentra con esto es útil.

new Handler().post(new Runnable() { 
      @Override 
      public void run() { 
       timerTextView.setText("00:" + String.format("%02d", counter)); 
       cancel(); 
      } 
     }); 
Cuestiones relacionadas