2013-01-14 213 views
0

我有一個代碼循環給定的方法多次,但for循環執行一個等待自己。也就是說,對於給定的代碼:循環延遲的任務

for(int j=3;j>=1; j--) 
{ 
final int k=j; 
new Handler().postDelayed(new Runnable(){ 
    @Override 
    public void run() { 
     randomMethod(k); 
     Toast.makeText(someService.this, "works!", Toast.LENGTH_SHORT).show(); 
    } 
}, 10000); 
} 

該代碼完全在10秒內執行,而不是所需的30秒。執行完run()之後,for循環不應該等待延遲結束嗎?

我該如何糾正?

+0

改變第二PARAM在postDelayed方法從10000到30000 –

+0

否,事情是,即使我將其更改爲30000它應該工作90000毫秒,但它只適用於第一個延遲30000. –

+0

如果你10000到30000那麼爲什麼它應該工作90000毫秒?目前你只是在每30000中發佈新的處理程序,而不是增加延遲時間 –

回答

2
int REFRESH_INTERVAL = 10 * 1000; 
int counter = 3; 
... 

Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new MyTimerTask(), 0, REFRESH_INTERVAL); 
... 
private class MyTimerTask extends TimerTask{ 
    public void run() { 
     randomMethod(counter--); 
     Toast.makeText(someService.this, "works!", Toast.LENGTH_SHORT).show(); 
    } 
} 

我認爲,存在HandlerpostDelayed()沒有必要,因爲Timer做這項工作

+0

我也認爲Timer是最好的選擇。謝謝你的提示。 –