在黑莓中编写秒表应用程序,如何使其运行更准确
我的应用程序具有类似于 BlackBerry Stopwatch 应用程序的功能:
显示时间的标签,每 100 毫秒更新一次。
我为 Timer 使用了一个单独的线程,它安排 TimerTask 来更新标签。
一切工作正常,但我注意到应用程序中的秒表运行速度比内置 BlackBerry 秒表慢一点 - 每分钟慢 1 秒。
有时,我的应用程序中的计时器会因未知原因而暂停一段时间,大约 300-500 毫秒。
是什么导致我的应用程序中的计时器比 BlackBerry 秒表慢?
有什么建议可以创建一个像黑莓秒表一样运行流畅的秒表吗?
My app has a feature like the BlackBerry Stopwatch application:
A label displaying the time, updated every 100 milliseconds.
I've used a separate thread for a Timer which schedules a TimerTask to update the label.
Everything works fine, but I've noticed the the stopwatch in my app runs a little bit slower than the built-in BlackBerry stopwatch -- it loses 1 second per minute.
Sometimes the timer in my app halts for a while, about 300-500 milliseconds, for unknown reasons.
What could make the Timer in my app slower than the BlackBerry stopwatch?
Any suggestions to create a stopwatch which run as smoothly as the BlackBerry stopwatch?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该使用 System.currentTimeMillis() 来计算时间。计时器不保证它何时执行 - 保证指定的时间是执行开始之前的最小延迟,但正如您所注意到的,没有最大值。因此,使用 Timer 来安排 UI 更新,但使用 System.currentTimeMillis() 计算经过的时间。
You should use System.currentTimeMillis() to compute the time. The Timer does not guarantee when it will execute - the guarantee is that the specified time is the minimum delay until execution starts, but there is no maximum, as you've noticed. So use the Timer to schedule UI updates, but calculate the elapsed time using System.currentTimeMillis().
我想你不应该依赖添加时间段。
所以60次睡眠1秒不应该被视为一分钟。
相反,先睡一会,醒来后检查系统时间。
I guess you shouldn't rely on adding time periods.
So 60 times sleep for 1 second should not be treated as minute.
Instead sleep for a second and after waking up check the system time.