我正在开发一个应用程序,它会在特定时间段内向特定号码发送消息。 问题是它会在该段时间后继续发送该消息。如何在该特定时间后停止计时器以停止发送该消息?
答案 0 :(得分:64)
CountDownTimer waitTimer;
waitTimer = new CountDownTimer(60000, 300) {
public void onTick(long millisUntilFinished) {
//called every 300 milliseconds, which could be used to
//send messages or some other action
}
public void onFinish() {
//After 60000 milliseconds (60 sec) finish current
//if you would like to execute something when time finishes
}
}.start();
提前停止计时器:
if(waitTimer != null) {
waitTimer.cancel();
waitTimer = null;
}
答案 1 :(得分:18)
和..我们必须为GC调用“waitTimer.purge()”。如果你不再使用Timer,“purge()”!! “purge()”从任务队列中删除所有已取消的任务。
if(waitTimer != null) {
waitTimer.cancel();
waitTimer.purge();
waitTimer = null;
}
答案 2 :(得分:9)
在java.util.timer中,可以使用.cancel()
来停止计时器并清除所有挂起的任务。
答案 3 :(得分:5)
我们可以安排计时器来完成工作。在结束之后我们设置了不会发送的消息。
这是代码。
Timer timer=new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
//here you can write the code for send the message
}
}, 10, 60000);
在这里我们调用的方法是,
public void scheduleAtFixedRate(TimerTask任务,长延迟,长时间段)
在这里,
任务:要安排的任务
延迟:首次执行前的时间量(以毫秒为单位)。
期间:后续执行之间的时间量(以毫秒为单位)。
有关详细信息,请参阅: Android Developer
您可以通过调用
来停止计时器timer.cancel();
答案 4 :(得分:2)
我遇到了类似的问题:每次按下特定按钮,我都会创建一个新的Timer。
my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}
退出该活动我删除了计时器:
if(my_timer!=null){
my_timer.cancel();
my_timer = null;
}
但这还不够,因为cancel()
方法只取消了最新的Timer。旧的被忽略了,没有停止运行。 purge()
方法对我没用。
我只是检查Timer
实例化
if(my_timer == null){
my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}
}
答案 5 :(得分:1)
它说在android上没有timer()?您可能会发现本文很有用。
http://developer.android.com/resources/articles/timed-ui-updates.html
我错了。定时器()可用。看来你要么像一次性操作那样实现它:
schedule(TimerTask task, Date when) // Schedule a task for single execution.
或者你在第一次执行后取消它:
cancel() // Cancels the Timer and all scheduled tasks.
答案 6 :(得分:1)
我遇到了类似的问题,这是由Timer初始化的位置引起的。
它被放置在一个被调用的方法中。
试试这个:
Timer waitTimer;
void exampleMethod() {
if (waitTimer == null ) {
//initialize your Timer here
...
}
“cancel()”方法仅取消了最新的Timer。旧的被忽略了,并没有停止运行。