Как определить, завершена ли задача Timer

У меня есть следующий код:

Timer timer = new Timer();      
TimerTask task = new TimerTask() {

    @Override
    public void run() {
        // TODO Auto-generated method stub
    }
};

timer.schedule(task, 10000);//execute after 10 seconds

Можем ли мы определить, выполняется ли задача уже по таймеру или еще должна быть выполнена?


person Pavan    schedule 05.12.2012    source источник


Ответы (2)


Добавьте простую переменную, например..

  boolean isTaskCompleted = false;
  Timer timer = new Timer();      
  TimerTask task = new TimerTask() {

     @Override
     public void run() {
        // do stuff
        isTaskCompleted = true;
     }
  };

  timer.schedule(task, 10000);//execute after 10 seconds
person DroidBender    schedule 05.12.2012
comment
Это хорошая идея! Но когда я вызываю одну и ту же задачу несколько раз для разных целей. Однако у меня есть разные переменные таймера для отмены разных задач. Как я могу узнать, работает ли задача, соответствующая этому конкретному таймеру, или нет. - person Anand; 17.08.2016

Конечно,

class CustomTask extends TimerTask {
    protected boolean isDone = false;
    public boolean isDone() {return isDone; }

    @Override
        public void run() {}
} 

CustomTask task = new CustomTask() {
    @Override
    public void run() {
       isDone=true;
    }
 };

РЕДАКТИРОВАТЬ: Если вы недовольны расширением класса, вы можете использовать метод scheduleExecutionTime(), который возвращает 0, если задача не была запущена.

http://docs.oracle.com/javase/6/docs/api/java/util/TimerTask.html

person JustDanyul    schedule 05.12.2012
comment
Я знаю об этом обходном пути. Но проблема в том, что isDone() нельзя вызвать явно, если вы не расширите TimerTask. Но я хотел знать, есть ли для этого API от TimerTask. - person Pavan; 05.12.2012
comment
спасибо .. но документ Android для ScheduleExecutionTime() говорит следующее: Задачи, которые еще не запущены, возвращают неопределенное значение. developer.android.com/reference/java/util/ - person Pavan; 05.12.2012
comment
java не имеет неопределенного типа, и объявление метода показывает, что он вернет длинное значение, поэтому он не может быть нулевым. Это неопределенное значение равно 0. Попробуйте :) - person JustDanyul; 05.12.2012