2016-09-06 176 views
0

我有Timer,我使用方法scheduleAtFixedRate以某种固定速率安排任务。问题是,在一些行动后,我想完成/取消此前计划的任务。在不停止计时器的情况下停止TimerTask

我知道,我可以使用.cancel().purge(),但将取消/完成我的计时器,这是一件好事,我不想。我只想完成任务。

你们有没有人知道如何做到这一点?

这是我的代码(我有作为类的字段创建Timer

receiveTimer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 

      int fileSize=(int)fileSizeToReceive; 
      int actual= totalReceived; 

      ((Notification.Builder) mBuilderReceive).setContentText("Receiving "+actualNameToReceive); 
      ((Notification.Builder) mBuilderReceive).setProgress(fileSize, actual, false); 
      mNotifyManager.notify(id, ((Notification.Builder) mBuilderReceive).getNotification()); 
     } 
    },0,500);//delay, interval 

回答

1

刚请提及您的TimerTask,以便您随时可以拨打cancel()

TimerTask上调用cancel()不会停止Timer

例如,声明你的任务:

TimerTask task; 

初始化,并安排它:

task = new TimerTask() { 
    @Override 
    public void run() { 
     int fileSize=(int)fileSizeToReceive; 
     int actual= totalReceived; 

     ((Notification.Builder) mBuilderReceive) 
      .setContentText("Receiving "+actualNameToReceive); 
     ((Notification.Builder) mBuilderReceiver) 
      .setProgress(fileSize, actual, false); 
     mNotifyManager.notify(id, ((Notification.Builder) mBuilderReceive) 
      .getNotification()); 
    } 
}; 

receiveTimer.scheduleAtFixedRate(task, 0, 500); 

要停止它,你只需要调用cancel()的任务实例:

task.cancel(); 
+0

它工作,谢谢! –

1

boolean isStop = false;

receiveTimer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 

      if(!isStop){ 

      int fileSize=(int)fileSizeToReceive; 
      int actual= totalReceived; 

      ((Notification.Builder) mBuilderReceive).setContentText("Receiving "+actualNameToReceive); 
      ((Notification.Builder) mBuilderReceive).setProgress(fileSize, actual, false); 
      mNotifyManager.notify(id, ((Notification.Builder) mBuilderReceive).getNotification()); 
      } 
     } 
    },0,500);//delay, interval 

当你不想执行的代码设置isStop = true