Android: Cuenta atrás o cronómetro inverso

Si quieres hacer una simple cuenta atrás o cronómetro inverso Android proporciona la clase CountDownTimer para tal fin. Su uso es muy simple tal y como se muestra en su documentación oficial y como vamos a ver a continuación.

Como ejemplo vamos a crear una cuenta atrás de 20 segundo decrementando segundo a segundo y notificando a cada segundo:

new CountDownTimer(20000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();

El constructor es muy sencillo ya que sólo requiere el tiempo total o de comienzo de la cuenta atrás y el intervalo de tiempo en el que este se va a decrementar (todo ello en milisegundos). En el caso del ejemplo tenemos una cuenta atrás de 20 segundos (2000 milisegundos) decrementandose de segundo en segundo (cada 1000 milisegundos).

Como vemos, tenemos básicamente dos eventos que nos van a hacer muy útiles:

  • onTick: Este evento se invoca en cada intervalo de decrementación, es decir, cada segundo en este ejemplo.
  • onFinish: Este  evento se invoca una vez que la cuenta atrás o el cronómetro inverso han acabado, se ha completado por tanto el tiempo total de 20 segundos del ejemplo.

Además de los dos eventos anteriores tenemos los métodos start y cancel para comenzar la cuenta atrás y cancelarla respectivamente.

Una aclaración muy a tener en cuenta es que el evento onTick es sincronizado para el objeto cuenta atrás creado, es decir, un nuevo evento onTick no es invocado hasta que el anterior a finalizado. Este dato se debe de tener en cuenta ya que si se insertan en él operaciones bloqueantes o secuenciales que tardan un cierto tiempo en realizarse puede alterar el tiempo total del cronómetro inverso.

Como se puede apreciar su uso es sencillo y puede resultar de gran utilidad en algunos desarrollos que requieran de un tiempo limite, como juegos con niveles de dificulta.

Happy minds!

Share on FacebookTweet about this on TwitterShare on LinkedInShare on RedditShare on Google+Digg thisShare on TumblrPin on PinterestBuffer this pagePrint this pageEmail this to someone