如何在Android中停止Timer?

时间:2011-02-14 15:11:53

标签: android timer

我正在开发一个应用程序,它会在特定时间段内向特定号码发送消息。 问题是它会在该段时间后继续发送该消息。如何在该特定时间后停止计时器以停止发送该消息?

7 个答案:

答案 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.

http://developer.android.com/reference/java/util/Timer.html

答案 6 :(得分:1)

我遇到了类似的问题,这是由Timer初始化的位置引起的。

它被放置在一个被调用的方法中。

试试这个:

Timer waitTimer;

  void exampleMethod() {

   if (waitTimer == null ) {
    //initialize your Timer here
    ...
   }

“cancel()”方法仅取消了最新的Timer。旧的被忽略了,并没有停止运行。