0

!= 前一秒的每一秒都会发布一个新值,当该值达到 <1 时,倒计时结束。

我用 System.currentTimeMillis() 记下开始时间,然后从那里简单地计算倒计时的剩余时间。所有这些都是在一个可运行的可重复运行的中完成的。

输入剩余的分钟和秒数时,我使用以下公式:

secondsLeft=    (int) ((time / 1000) % 60);
minutesLeft =  (int) (time / (60*1000));

我遇到的问题是,当 secondsLeft 达到 <1 时,计时器结束。但是我的警报通过使用纯毫秒的 AlarmManager 设置,因此不四舍五入到最接近的秒,运行得早一点,或者晚于计时器完成。

我该怎么做才能使它们同步?

一些额外的信息:

倒计时结束时,我正在振动手机。因此,我不能让计时器达到 0,然后手机早晚振动。

我使用 AlarmManager 进行振动,因为如果手机睡得太久,它就不会响起(在前台运行的服务大部分时间都在工作,但不是 100%)。

4

1 回答 1

1

根据您的描述,我相信您正在四舍五入。如果您在 1380866264454 毫秒处启动计时器,那么您的算法的下一秒仅在 546 毫秒内发生,而不是 1000 毫秒 - 因此您的倒计时将在安排闹钟之前大约 454 毫秒结束。因此,在进行帖子中显示的计算之前,获取开始时间的最后三位数字并从当前时间中减去它们。(1380866264454 - 454) 之后的第一个更改将在 (1380866265454 - 454) 处,至少 1000 毫秒。

于 2013-10-04T06:01:06.777 回答