studio - make a timer in android
cómo detener/cancelar Android CountDownTimer (3)
CountDownTimer también está funcionando bien para mí, pero creo que solo funciona si lo llama FUERA de la implementación de CountDownTimer (es decir, no lo llame en onTick).
Llamarlo al interior tampoco funcionó.
Estoy extendiendo la clase CountDownTimer para obtener alguna funcionalidad personalizada. En onTick () en caso de que se cumplan algunas condiciones, llamo a cancel (), esperando que ese sea el final de la misma, sin embargo, la devolución de llamada onTick () recibe una llamada hasta el conteo abajo se alcanza Entonces, ¿cómo evitar que esto suceda?
El método CountDownTimer.cancel () parece no estar funcionando. Aquí hay otro hilo sin solución. El temporizador no se detiene en Android .
Te recomendaría que uses Timer 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);
}});
}
}
Intenté 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 intenté usar un controlador dentro de Finish. Antiguo post 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();
}
});