如何在Android中停止Timer?

Kri*_*hna 34 android timer

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

ice*_*911 70

     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();
Run Code Online (Sandbox Code Playgroud)

提前停止计时器:

     if(waitTimer != null) {
         waitTimer.cancel();
         waitTimer = null;
     }
Run Code Online (Sandbox Code Playgroud)

  • 我试图用这种方式提前停止计时器,但它没有停止。可能有什么问题? (2认同)

cmc*_*nce 21

和..我们必须为GC调用"waitTimer.purge()".如果你不再使用Timer,"purge()"!! "purge()"从任务队列中删除所有已取消的任务.

if(waitTimer != null) {
   waitTimer.cancel();
   waitTimer.purge();
   waitTimer = null;
}
Run Code Online (Sandbox Code Playgroud)

  • 不需要调用`Timer.purge()`,因为`waitTimer = null`标记了GC的整个结构.`purge()`的目的是丢弃已经用`TimerTask.cancel()`取消的任务. (4认同)

Pet*_*ego 9

在java.util.timer中,可以使用.cancel()停止计时器并清除所有挂起的任务.

  • 但实际上这不是真的,我打电话给.cancel()并且计时器没有停止! (5认同)

小智 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);
Run Code Online (Sandbox Code Playgroud)

在这里我们调用的方法是,

public void scheduleAtFixedRate(TimerTask任务,长延迟,长时间段)

在这里,

任务:要安排的任务

延迟:首次执行前的时间量(以毫秒为单位).

period:后续执行之间的时间量(以毫秒为单位).

有关更多信息,请参阅: Android Developer

您可以通过致电来停止计时器,

timer.cancel();
Run Code Online (Sandbox Code Playgroud)