3

有没有办法连续循环通过倒数计时器?我有一个基本计时器,经过 60 秒,然后更新一个文本字段并且它正在工作,但我想添加功能:当它倒计时时,自动重新启动直到用户取消它?也许通过线程运行它?不知道如何处理。这就是我所拥有的,同样,这段代码有效,但我只能停止和启动倒数计时器,不能进行连续循环:

cdt = new CountDownTimer(60000,1000) {
    public void onTick(long millisUntilFinished) { 
        tvTimer.setText("remaining : " + millisUntilFinished/1000 + " secs");
    }
     public void onFinish() { 
       tvTimer.setText("");
       bell.start(); 
     }
 };

 /***************On Click/Touch Listeners*******************/
 btnNext.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
        tvTimer.setText("");
        btnStart.setText("Start Timer");
        SetImageView2(myDbHelper); 
        cdt.cancel(); 

       }
    });

    btnStart.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
        if (!TimerTicking){ 
          cdt.start();
          btnStart.setText("Stop Timer");
        }
        else { 
            tvTimer.setText("");
            cdt.cancel();
            btnStart.setText("Start Timer");

        }
       }
    });
4

2 回答 2

6

循环 CountDownTimer的一种非常基本的方法是调用start().onFinished()

public void onFinish() {
    ...
    start();  // Start this timer over
}

(确保在执行此操作时取消 CountDownTimer,onPause()否则计时器可能会泄漏并继续在后台触发......哎呀。)

然而 CountDownTimers 有根本的缺陷(在我看来):它经常跳过最后一次调用onTick()并且每次调用它都会增加几毫秒...... :(我在上一个问题onTick()中重写了 CountDownTimer以更准确并调用每个刻度.

于 2012-11-17T02:42:26.283 回答
0

CountDownTimer() 构造函数的第一个值,即运行的总时间,很长,可以保存接近 3 亿年的值。对于大多数移动应用程序来说,这应该足够长了。:-)

所以只需调用它cdt = new CountDownTimer(Long.MAX_VALUE, 1000)一秒钟的循环,它将连续运行。

于 2014-03-20T06:53:51.130 回答