我找到了这个样本 https://github.com/ajithvgiri/Stopwatch 它显示毫秒,但不提供毫秒精度 我想知道Android Clock应用中的秒表如何工作 有毫秒精度的解决方案吗? 我知道不可能快速更新textview,但想知道是否可以以毫秒精度记录时间 我检查了不提供毫秒信息的TextClock类 并找出这行代码
private final Runnable mTicker = new Runnable() {
public void run() {
if (mStopTicking) {
return; // Test disabled the clock ticks
}
onTimeChanged();
long now = SystemClock.uptimeMillis();
long next = now + (1000 - now % 1000);
getHandler().postAtTime(mTicker, next);
}
};
我想知道为什么我们要使用带有long next = now + (1000 - now % 1000);
行代码的postAtTime()而不是仅仅具有postDelayed(1000),因为它需要具有第二个精度?
答案 0 :(得分:0)
根据我的观察,postAtTime()
和postDelayed()
导致对enqueueMessage()
的相同调用,只是参数不同。
我假设原始代码的作者想在下一秒的0毫秒后精确触发下一个股票报价调用,因此调用long next = now + (1000 - now % 1000);
。它只是计算当前秒的剩余时间,并计划下一次通话。
通常,我会说这段代码不是那么精确,因为它是在UI线程上调度计数器,由于绘图和其他工作,该计数器可能会延迟。此外,每毫秒在UI线程上执行任何复杂的操作(ui更新或日志记录)肯定会导致FPS下降。如果您只想在执行某些操作时了解当前设备时间,则只需使用SystemClock.uptimeMillis();
甚至是System.nanoTime();
,就无需自己计算。