如何在android中停止计时器?

如何在android中停止计时器?,android,timer,Android,Timer,我正在开发一个应用程序,它在特定的时间段内向特定的号码发送消息问题是,它会在这段时间后继续发送该消息。我如何在该特定时间后停止计时器以停止发送该消息?在java.util.timer中,可以使用它停止计时器并清除所有挂起的任务。它说timer()在android上不可用?您可能会发现本文很有用 我错了。计时器()可用。看起来您要么以一次性操作的方式实施它: schedule(TimerTask task, Date when) // Schedule a task for single ex

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

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

它说timer()在android上不可用?您可能会发现本文很有用


我错了。计时器()可用。看起来您要么以一次性操作的方式实施它:

schedule(TimerTask task, Date when) // Schedule a task for single execution.
或者在第一次执行后取消:

cancel()  // Cancels the Timer and all scheduled tasks.

要提前停止计时器,请执行以下操作:

     if(waitTimer != null) {
         waitTimer.cancel();
         waitTimer = null;
     }
和。。我们必须为GC调用“waitTimer.purge()”。如果不再使用计时器,“purge()”!!“purge()”从任务队列中删除所有已取消的任务

if(waitTimer != null) {
   waitTimer.cancel();
   waitTimer.purge();
   waitTimer = null;
}

我有一个类似的问题,这是由放置计时器初始化引起的

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

试试这个:

Timer waitTimer;

  void exampleMethod() {

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

“cancel()”方法仅取消了最新的计时器。较旧的已被忽略,但未停止运行。

我们可以安排计时器执行此工作。设置时间结束后,消息将不会发送

这是代码

Timer timer=new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
            //here you can write the code for send the message
        }
    }, 10, 60000);
这里我们调用的方法是

公共无效调度固定日期(TimerTask任务、长延迟、长周期)

在这里

任务:要计划的任务

延迟:首次执行前的时间量(毫秒)

期间:后续执行之间的时间量(毫秒)

有关更多信息,您可以参考:

您可以通过调用

timer.cancel();

我有一个类似的问题:每次我按下一个特定的按钮,我就创建一个新的计时器

my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}
退出该活动时,我删除了计时器:

if(my_timer!=null){
my_timer.cancel();
my_timer = null;
}
但这还不够,因为
cancel()
方法只取消了最新的计时器。老一辈被忽视了,他们没有停止跑步。
purge()
方法对我没有用处。 我只需检查
计时器
实例化即可解决问题:

if(my_timer == null){
my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}
}

如果你能展示一些使用计时器的代码,我会帮你。我不明白这是一个多么离题的问题!它得到了15张赞成票,8颗星也接受了45张反对票!!没问题,我发誓我在编辑时就这么做了…但是谢谢你的编辑!我曾尝试用这种方法提前停止计时器,但它没有停止。可能会出现什么问题?应该在哪里进行?在onPause()上的onDestroy()中?为什么要将其设置为null?为什么必须将其设置为null?我们应该将其称为:在onPause或onDestroy中?@IgorGanapolsky我认为这取决于具体情况。答案是。。大概当我们不再需要计时器的时候。如果在onPause()中调用上述代码,则应在onResume()中创建计时器。如果在onDestory()中,请在onCreate()中创建计时器。另外,假设我们有两个启动和停止计时器按钮。当用户单击开始按钮时,我们可以创建计时器。然后,当用户单击停止按钮时,我们应该销毁计时器。:)无需调用
Timer.purge()
,因为
waitTimer=null
已经为GC标记了整个结构。
purge()。但是我喜欢安全地实现一些东西。因为我无法检查代码背后的所有内容。我不是天才:)我看到了关于佩奇的评论();从任务队列中删除所有已取消的任务。如果任务上没有其他引用,则在此调用之后,可以对其进行垃圾收集。为什么将其设为null?还有,清除不起作用?但实际上这不是真的,我调用了.cancel(),计时器没有停止@bebosh它在
countDownTimer.called()时工作被称为.timer.cancel(),这不是真的,我调用了cancel,timer没有停止第一个链接返回一个错误404它可能已被删除。在这里阅读:如果所有的C程序员都能在Java编程时开始使用cammelCase,那么生活会变得更加轻松
if(my_timer == null){
my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}
}