每秒!=前一秒发布一个新值,当值达到<1时,倒计时结束。
我注意System.currentTimeMillis()的开始时间,并从那里简单地计算倒计时的剩余部分。所有这些都是在一个可以反复运行的runnable中完成的。
键入min&amp;几秒钟后我使用这个公式:
secondsLeft= (int) ((time / 1000) % 60);
minutesLeft = (int) (time / (60*1000));
我遇到的问题是当secondsLeft达到<1时,计时器结束。但我的闹钟通过AlarmManager设置,它使用纯毫秒,因此不会四舍五入到最接近的秒,比计时器结束时更早或稍晚运行。
我可以做些什么来使它们同步?
一些额外信息:
倒计时结束时,我正在振动手机。因此我不能让计时器达到0然后手机早晚振动。
我使用AlarmManager进行振动,因为如果手机睡得太久,它就不会熄灭(大多数时候在前台运行的服务工作,但不是100%)。 的
答案 0 :(得分:1)
根据你的描述,我相信你会逐渐变得圆润。如果您启动计时器,比如1380866264454ms,您的算法的下一秒仅在546毫秒内发生,而不是1000 - 所以您的倒计时将在您的警报计划之前大约454毫秒结束。因此,获取开始时间的最后三位数,并在进行帖子中显示的计算之前从当前时间中减去它们。 (1380866264454 - 454)之后的第一个变化将是(1380866265454 - 454),距离至少1000毫米。