2012-05-08 25 views
-3

我正在使用定時器的while循環。 事情是,定時器不是在每個循環中使用。 僅在第一次使用。第一次包含在循環內的語句在沒有我設定的延遲的情況下執行。 這是如何甚至可能的,因爲定時器包含在while循環中。 任何解決方案?Java/Android編程 - 循環失敗

 int count = 1; 
     while (count <= 10) { 
      final Handler handler = new Handler(); 
      Timer t = new Timer(); 
      t.schedule(new TimerTask() { 
       public void run() { 
        handler.post(new Runnable() { 
         public void run() { 

         // Stuff the while loop executes 
        } 
        }); 
       } 
      }, 20000); 
      count++; 
     } 
+0

呃。你正在啓動10個獨立的計時器來完成這項任務。 ...這是你想要的嗎? –

回答

1

TimerTask開始一個新的線程,然後循環正常進行。

線程的執行不會延遲執行循環中的代碼。

+0

讓我給你一個例子,我想要做什麼... 我只是想烤一次一小時的東西。換句話說「// Stuff while循環執行」我想要那裏每小時執行一次。 – user1381084

+0

我想提出另一個問題,非常具體地說明你要實現的目標,並展示代碼來展示你已經嘗試過的東西。 – Louth

+0

謝謝,我會那樣做的。 – user1381084

0

這是因爲你正在排隊等待10個敬酒,所有要在一個小時內執行。循環的每次迭代只需要幾分之一毫秒,或者可能比這稍微多一點點。爲了正確排列它們,每次可以做3600000 *計數而不是3600000。

雖然這是一種可怕的方式。你應該使用AlarmManager來做這樣的事情。

+0

謝謝,我會試試看。 – user1381084

0

您正在安排10 TimerTask s在一小時後同時執行。因此,所有10個任務都在1小時後執行,這使得看起來像1執行,因爲所有Toast消息同時顯示。要在固定延遲調度任務,以1小時開始的第一個任務,使用此方法:

Timer t = new Timer(); 
t.schedule(task, 3600000, 3600000); 

這將執行,直到調用t.cancel()

+0

非常感謝Jason! – user1381084