我做了一个计时器,我想在它达到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 ----------------
}
}
我该怎么办?
答案 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(就像我在代码中所做的那样)。