使用倒数计时器以特定间隔发出信号

时间:2014-05-26 19:22:58

标签: java android algorithm timer countdowntimer

现在我有一个CountDownTimer,如下所示:

MyTimer(60000, 1);

所以它以1秒的间隔向下滴答60秒。 我在计时器中发出bpm信号。

这是通过将每分钟除以bpm-number来完成的:

public void onTick(long millisLeft) {
    if (TimeUnit.MILLISECONDS.toSeconds(millisLeft) % (60 / bpm) == 0) {
     doSignal();
    }
}

这很有效,但只有在计时器设置为间隔1000

时才有效
MyTimer(60000, 1000);

这意味着它将每秒钟(每1000毫秒)发一次。但我需要它以1ms的速度打勾。

我的情况的问题是如果计时器以1ms的间隔打勾。当它应该 - 但会快速重复时,它将启动信号。

如果间隔为1000毫秒且bpm设置为20,则每隔三秒发出一声哔声(60/20 == 3)。如果间隔设置为1ms,它将每隔三秒钟开始发出蜂鸣声 - 并在该秒钟内反复发出蜂鸣声。

所以某种程度上我的条件在一个更大的范围内是真实的,而不是我预期的1ms自动收报机间隔。

我如何设计我的条件,以便每隔(60 / bpm)秒启动一次定时器,间隔为1ms?

1 个答案:

答案 0 :(得分:1)

TimeUnit.MILLISECONDS.toSeconds(millisLeft)为所有57000 <= millisLeft <= 57999返回57,因此在该秒内您会收到1000 doSignal次来电(57 % (60/20) == 0)。 54,51,...同样如此。为避免这种情况,您可以使用此表达式millisLeft % (60000/20) == 0

相关问题