根据 Android文档 SystemClock.elapsedRealtime()
是通用间隔计时的推荐基础。这是因为,根据文档, elapsedRealtime()is guaranteed to be monotonic, [...], so is the recommend basis for general purpose interval timing.
SystemClock文档很好地概述了各种时间方法及其适用的用例。
SystemClock.elapsedRealtime()
并且SystemClock.elapsedRealtimeNanos()
是计算通用经过时间的最佳选择。
SystemClock.uptimeMillis()
并且System.nanoTime()
是另一种可能性,但与推荐的方法不同,它们不包括深度睡眠时间。如果这是您想要的行为,那么它们可以使用。否则坚持elapsedRealtime()
。
- 远离,
System.currentTimeMillis()
因为这将返回“墙上”时钟时间。这不适合计算经过的时间,因为挂钟时间可能会向前或向后跳跃。诸如 NTP 客户端之类的许多事情都可能导致挂钟时间跳跃和歪斜。这将导致经过时间的计算基于currentTimeMillis()
不总是准确的。
游戏开始时:
long startTime = SystemClock.elapsedRealtime();
游戏结束时:
long endTime = SystemClock.elapsedRealtime();
long elapsedMilliSeconds = endTime - startTime;
double elapsedSeconds = elapsedMilliSeconds / 1000.0;
此外,Timer() 是一个尽力而为的计时器,并不总是准确的。因此,在比赛期间会累积计时错误。要更准确地显示中间时间,请使用定期检查来System.currentTimeMillis()
作为发送到的时间的基础setText(...)
。
此外,Timer
您可能想研究 using ,而不是 using TimerTask
,这个类是为您想要做的事情而设计的。唯一的问题是它倒计时而不是倒计时,但这可以通过简单的减法来解决。