2014-09-03 97 views
0

好了,我這裏有一個相當奇怪的問題: 我有一個方法調用的延遲方法的順序,例如:如何鏈接計時器?

btn1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      flash(true, 3000); 
      flash(false, 1200); 
     } 
}); 

和Flash功能雲:

private void flash(final boolean color, int duration) { 

    // SLEEP duration MILLISECONDS HERE ... 

    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     public void run() { 
      changeColour(color); 
     } 
    }, duration); 
} 

會發生什麼事是1200毫秒定時器在3000毫秒定時器之前啓動,儘管3秒鐘定時器應該先打開。我嘗試添加定時器的觸發器,但只凍結了整個應用程序:

... 
public void onClick(View view) { 
    flash(true, 3000); 
    while(wait); //stop here until the timer triggers wait to false 
    wait = false; 
    flash(false, 1200); 
} 
... 
public void run() { 
    changeColour(color); 
    wait=false; 
} 
... 

任何幫助表示讚賞,謝謝。

回答

0

會發生什麼情況是1200毫秒定時器在3000毫秒之前開始計時,但3秒後應該先走。

只有在兩者都設置了確切的時間間隔時,第一個應該首先觸發。但是,現在您只需觸發兩次閃爍,一次在3秒後運行一次,一次在1.5秒後運行(當前時間爲的)。

爲了你需要發佈的第二條消息時要採取考慮到第一觸發的時候,你想要什麼:

flash(true, 3000); // post a message after 3 seconds 
flash(false, 4200); // post a message after 4,2 seconds(so at 1,2 seconds after the first flash runs) 
+0

謝謝,這似乎是最後一招:我擔心的是,堆垛例如,隊列中的一百個定時器將不起作用,因爲添加到隊列本身需要一些時間 - 它可能會延遲定時器,例如50ms等低值。 – Sincress 2014-09-04 08:09:51

+0

@Sincress一些偏移量會發生,但在具有不同增加時間間隔的循環中調用'flash()'不應該產生明顯的延遲。 – Luksprog 2014-09-04 08:59:38

+0

其實這工作得很好,非常感謝你先生! – Sincress 2014-09-04 09:04:35