отмена планирования запланированной задачи в Android с помощью ScheduledExecutorService - PullRequest
1 голос
/ 09 марта 2012

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

Это довольно просто:

public void startSchedulerForTimeout() {

    Log.i("x", "SCHEDULING TIMEOUT " );
    timeoutForLoopReached = false;
    scheduler.schedule(new Runnable() {
    public void run() {
        timeoutForLoopReached = true;
        Log.i("x", "SET TIMEOUT FLAG ");
        }
     }, 10, TimeUnit.SECONDS);
}

поэтому в своем коде я просто пишу:

startSchedulerForUSBMessageTimeout();
while (!done && !timeoutForLoopReached) {
  ...do the loop stuff
}

Чтобы убедиться, что запланированное задание не запускается при повторном запуске цикла, мне нужно отменить планирование устаревшего задания (в случае, если я завершил циклдо истечения времени ожидания), чтобы новый таймер снова запустился в начале нового цикла (вместо запуска старого цикла после того, как первый цикл был завершен прямо между вторым циклом):

Как можноЯ просто отменяю запланированное задание, которое не было запущено, чтобы избежать путаницы в этом задании?

Большое спасибо!

Ответы [ 2 ]

5 голосов
/ 09 марта 2012

Использование ScheduledFuture :

ScheduledExecutorService scheduledTaskExecutor = Executors.newScheduledThreadPool(1);
Runnable longRunningTask = new Runnable();

// schedule long running task in 2 minutes:
ScheduledFuture scheduleFuture = scheduledTaskExecutor.schedule(longRunningTask, 2, TimeUnit.MINUTES);

... ...
// At some point in the future, if you want to cancel scheduled task:
scheduleFuture.cancel(true);
... ...
1 голос
/ 09 марта 2012

Все переопределения schedule возвращают ScheduledFuture, который является Future, который имеет метод cancel.

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