根据 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,这个类是为您想要做的事情而设计的。唯一的问题是它倒计时而不是倒计时,但这可以通过简单的减法来解决。