Я разрабатываю приложение, которое отправляет сообщение на определенный номер за определенный период времени. Проблема заключается в том, что он продолжает отправлять это сообщение после этого периода времени. Как мне остановить таймер после этого определенного времени, чтобы прекратить отправку этого сообщения?
Как остановить таймер в Android?
Ответ 1
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;
}
Ответ 2
и.. мы должны называть "waitTimer.purge()" для GC. Если вы больше не используете Таймер, "purge()"!! "purge()" удаляет все отмененные задачи из очереди задач.
if(waitTimer != null) {
waitTimer.cancel();
waitTimer.purge();
waitTimer = null;
}
Ответ 3
В java.util.timer можно использовать .cancel()
, чтобы остановить таймер и очистить все ожидающие задачи.
Ответ 4
У меня была аналогичная проблема: каждый раз, когда я нажимаю определенную кнопку, я создаю новый таймер.
my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}
Выход из этого действия я удалил таймер:
if(my_timer!=null){
my_timer.cancel();
my_timer = null;
}
Но этого было недостаточно, потому что метод cancel()
только отменил последний таймер. Старшие были проигнорированы и не переставали работать. Метод purge()
не был полезен для меня.
Я решил проблему просто проверить экземпляр Timer
:
if(my_timer == null){
my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}
}
Ответ 5
Он говорит, что таймер() недоступен на Android? Вы можете найти эту статью полезной.
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
У меня была аналогичная проблема, и это было вызвано размещением инициализации таймера.
Он был помещен в метод, который был вызван чаще.
Попробуйте следующее:
Timer waitTimer;
void exampleMethod() {
if (waitTimer == null ) {
//initialize your Timer here
...
}
Метод "cancel()" отменяет только последний таймер. Старшие были проигнорированы и не перестали работать.
Ответ 7
Мы можем запланировать таймер, чтобы выполнить работу. По истечении времени, которое мы установили, сообщение не будет отправлено.
Это код.
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, длительная задержка, длительный период)
Здесь
задача: задача запланировать
delay: количество секунд в миллисекундах перед первым исполнением.
период: количество времени в миллисекундах между последующими исполнениями.
За дополнительной информацией вы можете обратиться: Разработчик Android
Вы можете остановить таймер, позвонив,
timer.cancel();