java - 循环正好一秒

标签 java android timing

我正在尝试创建一个 Android 应用程序,每秒记录运行者的位置。但是,我发现完成时需要略多于一秒的时间。

这是我的代码:

Runnable run = new Runnable() {
    @Override
    public void run() {
        Long start = SystemClock.elapsedRealtime();
        if (getIfRunning() == true) {
            try {
                if (location2 != null) {
                    Float distanceFromLast = totalDistance(location2);
                    addToDistance(distanceFromLast);
                }
                getCoords();
                mMap.clear();
                markOldCoords();
                writeCoords();
                setCount();
                updateScreen();
            } catch (Exception e) {
            }
        }
        Long time = SystemClock.elapsedRealtime() - start;
        handler.postDelayed(this, 1000 - time);
    }
};
handler.post(run);

最佳答案

一般来说,你无法像这样得到准确的时间。由于系统当时正在执行其他操作,计时器总是会稍早或稍晚唤醒。您能做的最好的事情就是接受它永远不会完美的事实,并相应地更新您的代码以找出实际触发的时间。

关于java - 循环正好一秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36901635/

相关文章:

Java 包 hell 尝试在 MacOS + IntelliJ 上使用 JavaFX

java - java 比较 int 和数组

android - 在 map 中定位我的位置的问题

java - 如何在 MPAndroidChart 中的条形图上正确添加标签

ruby-on-rails - Rspec 测试需要 sleep 才能工作

c++定时相同的循环给出不同的结果

java - 判断包含括号的字符串是否平衡

java - 词性标注器仅标记句子的开头和结尾

java - 如何从句子数组列表中获取包含特定单词的句子?

CLOCK_MONOTONIC 与 CLOCK_MONOTONIC_RAW 截断值