定时器在一分钟后停止

时间:2014-06-17 09:13:39

标签: android

我做了一个计时器,我想在它达到60秒(1分钟)时停止它。

这是代码:

        Timer t = new Timer();
    t.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    myTextView.setText("timer=" + String.valueOf(TimeCounter));
                    TimeCounter++;
                }
               });
            }
    }, 0, 1000);  
    int I=60;
    if (TimeCounter == I) { 
          -------------- stop the timer here ----------------
       }
       }

我该怎么办?

3 个答案:

答案 0 :(得分:0)

尝试下面的代码来停止计时器: -

if (TimeCounter == I) { 
          t.cancel();
       }

另见以下链接: -

How to stop immediately the task scheduled in Java.util.Timer class

答案 1 :(得分:0)

您可以使用CountDownTimer,也许这是一个更简单的解决方案:

      int Time = 0;

      public class OneMinuteCountDownTimer extends CountDownTimer {

       public OneMinuteCountDownTimer (long startTime, long interval) {

      super(startTime, interval);
    }

  @Override
  public void onFinish() {

             myTextView.setText("timer="+Time+" time finished");
             Time=0;
  }

  @Override
  public void onTick(long millisUntilFinished) {
             Time++;
         myTextView.setText("timer="+Time);
  }
 }

}

使CountDownTimer成为全局,并在您想要启动CountDownTimer时调用它:

       private OneMinuteCountDownTimer countDownTimer;
       private final long startTime = 60 * 1000;
       private final long interval = 1 * 1000;
在onCreate(EDIT)中

       countDownTimer = new OneMinuteCountDownTimer(startTime,interval);

       countDownTimer.start();

并取消,如果您想在一分钟之前取消它:

       countDownTimer.cancel();

答案 2 :(得分:0)

你可能需要在你的任务中移动停止条件......所以它看起来更像是这样:

final Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
    public void run() {
        runOnUiThread(new Runnable() {
            public void run() {
                if (TimeCounter == I) {
                    t.cancel();
                    return;
                }

                myTextView.setText("timer=" + String.valueOf(TimeCounter));
                TimeCounter++;
            }
           });
        }
}, 0, 1000);

请记得先前定义:

int I=60;

此外,您可能需要将Timer标记为final(就像我在代码中所做的那样)。