如何连锁定时器?

时间:2014-09-03 10:18:02

标签: android timer handler delay chain

好的,我在这里有一个相当奇怪的问题: 我有一种方法调用一系列延迟方法,例如:

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

闪光灯功能如下:

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;
} 
...

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分: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)