如何确定定时器任务是否已完成?

10

我有以下代码:

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

我们能否确定任务是由计时器已经执行还是仍处于待执行状态?

2个回答

6
添加一个简单的变量,例如...
  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

这是一个好主意!但是当我为多个目的多次调用同一任务时,我有不同的计时器变量来取消不同的任务。我该如何找到与特定计时器对应的任务是否正在运行? - Anand

3
当然,
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;
    }
 };

编辑: 如果您不想扩展类,可以使用scheduledExecutionTime()方法,如果任务尚未运行,则返回0。

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


我知道这个解决方法... 但问题在于 isDone() 除非你扩展 TimerTask,否则无法显式调用。但我想知道是否有任何来自 TimerTask 的 api 可以做到这一点。 - Pavan
谢谢。但是Android文档中对scheduledExecutionTime()的说明是:尚未运行的任务返回一个未定义的值。http://developer.android.com/reference/java/util/TimerTask.html#scheduledExecutionTime() - Pavan
Java没有“undefined”类型,方法声明显示它将返回一个long类型,因此它不能为null。这个未定义的值是0。试试吧 :) - JustDanyul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接