2016-02-29 44 views
0

好的,所以,我想要一個任務運行並在一段時間後繼續運行(如JS'setInterval()函數,而TimerTask有一個方法,稱爲scheduleAtFixedRate,它基本上做同樣的事情然而,沒有明確的機制來pauseresume一個TimerTask.TimerTask暫停/恢復情況下不工作

我因此,閱讀,一旦一個Timer被取消,去地獄。

我還讀了一個解決方法可以實現。

這裏是我的代碼:

Timer t = new Timer(); 
     t1 = new TimerTask() { 
      @Override 
      public void run() { 

       //Do Something like, 
a++; 

      } 
     }; 
     t.scheduleAtFixedRate(t1, 0L, 300L); /*Pretty basic till this line. Just a TimerTask ddeclaration and execution via a Timer `t`.*/ 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if (flag == 1) { 

t.scheduleAtFixedRate(t1,0,300);//This call says "TimerTask already scheduled," even though purge removed it. 
       } else { 
        t1.cancel(); //cancelling the task so that purge does something. 
        int a = t.purge();//a is 1. Purge worked. TimerTask was removed from the queue. 
        Log.d("The number of tasks",a+"");//1 
        flag = 1; 
       } 
      } 
     }); 

如何使這項工作?

但是,如果可以使用ScheduleExecutorService,任何人都可以實現此評論中提到的內容嗎? Pause/Resume ScheduleExecutorService

+0

當您的應用程序可見並正在使用時,您的任務是否只需在'onResume()'和'onPause()'之間執行?是否有它需要在後臺線程上運行的原因?因爲你可能想考慮使用'Handler'而不是使用'Timer',所以通常不鼓勵。 –

+0

假設任務正在運行。然後,如果調用onPause,則該任務應該暫停。並保持其位置,而應用程序的其餘部分仍然可用。當onResume被調用時,它應該繼續它正在做的事情。我該如何使用Handler? –

+0

它必須在後臺線程上運行。 –

回答

1

比這個例子中使用TimerTimerTask是使用的UI線程上HandlerHandler.postDelayed(...)調度回調一個更好的辦法。

你沒有做任何重處理或其他任何需要在單獨的線程上執行回調的東西,並且正在更新需要在UI線程上完成的UI元素。