我有一个10和20的问题游戏.我需要计算用户完成游戏后经过的时间.
Timer T=new Timer();
T.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable()
{
public void run()
{
countdown.setText(""+count);
count++;
}
});
}
}, 1000, 1000);
Run Code Online (Sandbox Code Playgroud)
我用这个来阻止柜台:
T.cancel();
Run Code Online (Sandbox Code Playgroud)
现在我需要两件事:
poi*_*oae 73
游戏开始时:
long tStart = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
当游戏结束时:
long tEnd = System.currentTimeMillis();
long tDelta = tEnd - tStart;
double elapsedSeconds = tDelta / 1000.0;
Run Code Online (Sandbox Code Playgroud)
Ben*_*min 49
根据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();
Run Code Online (Sandbox Code Playgroud)
当游戏结束时:
long endTime = SystemClock.elapsedRealtime();
long elapsedMilliSeconds = endTime - startTime;
double elapsedSeconds = elapsedMilliSeconds / 1000.0;
Run Code Online (Sandbox Code Playgroud)
此外,Timer()是尽力而为计时器,并不总是准确的.因此在游戏持续时间内会有累积的计时错误.为了更准确地显示临时时间,请使用定期检查System.currentTimeMillis()作为发送时间的基础setText(...).
此外,Timer您可能希望查看使用,而不是使用TimerTask,此类是为您要执行的操作而设计的.唯一的问题是它倒计时而不是向上,但这可以通过简单的减法来解决.
小智 11
更好!
long tStart = System.nanoTime();
long tEnd = System.nanoTime();
long tRes = tEnd - tStart; // time in nanoseconds
Run Code Online (Sandbox Code Playgroud)
阅读有关nanoTime()的文档!
| 归档时间: |
|
| 查看次数: |
95797 次 |
| 最近记录: |