2016-09-06 13 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()に電話することができます。

TimerTaskcancel()をコールすると、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

関連する問題