无法在Android中获得毫秒级精度的秒表?

时间:2019-02-27 00:03:21

标签: android handler timertask

我找到了这个样本 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),因为它需要具有第二个精度?

1 个答案:

答案 0 :(得分:0)

根据我的观察,postAtTime()postDelayed()导致对enqueueMessage()的相同调用,只是参数不同。 我假设原始代码的作者想在下一秒的0毫秒后精确触发下一个股票报价调用,因此调用long next = now + (1000 - now % 1000);。它只是计算当前秒的剩余时间,并计划下一次通话。

通常,我会说这段代码不是那么精确,因为它是在UI线程上调度计数器,由于绘图和其他工作,该计数器可能会延迟。此外,每毫秒在UI线程上执行任何复杂的操作(ui更新或日志记录)肯定会导致FPS下降。如果您只想在执行某些操作时了解当前设备时间,则只需使用SystemClock.uptimeMillis();甚至是System.nanoTime();,就无需自己计算。