как отменить существующее расписание таймера - PullRequest
6 голосов
/ 27 октября 2011

В настоящее время я использую таймер для выполнения некоторой функции каждый интервал времени. Однако позже, когда я захочу изменить интервал выполнения функции, я не могу отменить предыдущее расписание. как это можно решить? Спасибо

Ответы [ 2 ]

4 голосов
/ 27 октября 2011

С помощью метода timer.cancel() вы можете отменить таймер и все запланированные задачи. (см. Документация по API ) или вы можете вызвать метод отмены для вашей TimerTask timertask.cancel() (см. Документация по API )

Если вы хотите изменить запланированное время, вы должны отменить TimerTask и добавить новый TimerTask.

3 голосов
/ 27 октября 2011

Можно использовать ScheduledThreadPoolExecutor вместо Timer.

Использование довольно простое. Вы создаете экземпляр исполнителя:

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor( 1 );

А потом, когда вы хотите добавить задачу, вы звоните:

executor.scheduleAtFixedRate( myRunnable, delay, interval, unit );

Где myRunnable - это ваша задача (которая реализует Runnable -интерфейс), delay - сколько времени до того, как задача должна быть выполнена в первый раз, interval - время между выполнением задачи после первой выполнение. delay и interval измеряются на основе параметра unit, который может быть TimeUnit. * (Где * - SECONDS, MINUTES, MILLISECONDS и т. Д.).

Затем, чтобы остановить выполнение, вы звоните:

executor.shutdownNow();

И затем вы можете повторно отправить задание с другим интервалом.

Примечание. Возможно, вам придется создать новый экземпляр исполнителя перед повторной отправкой задачи, но я не совсем уверен, почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...