创建简单秒表计时器android应用程序的准确性问题

创建简单秒表计时器android应用程序的准确性问题,android,precision,postdelayed,Android,Precision,Postdelayed,我是Android开发新手。我想创建一个精度为0.01秒的秒表。以下是我的部分代码(我认为问题就在其中): 因为postDelayed方法的延迟是以毫秒为单位的,所以它的十倍是1厘米秒。所以我每10毫秒增加一次厘米秒变量。到目前为止还不错 但是,当我在我的设备上测试我的应用程序时,时间似乎比应该的要慢。与除法和模运算相对应的代码是否有可能造成如此多的延迟,从而阻碍增量并降低精度 我已经重写了应用程序0.1秒(分秒)(by:centiseconds/10和%10以及postDelayed(…,10

我是Android开发新手。我想创建一个精度为0.01秒的秒表。以下是我的部分代码(我认为问题就在其中):

因为postDelayed方法的延迟是以毫秒为单位的,所以它的十倍是1厘米秒。所以我每10毫秒增加一次厘米秒变量。到目前为止还不错

但是,当我在我的设备上测试我的应用程序时,时间似乎比应该的要慢。与除法和模运算相对应的代码是否有可能造成如此多的延迟,从而阻碍增量并降低精度

我已经重写了应用程序0.1秒(分秒)(by:centiseconds/10和%10以及postDelayed(…,100)),它似乎运行正常

附加说明
这就是我的4.3 Jellybean秒表精度为0.1秒的原因吗?

android对此类应用程序的精度限制是什么?(Timedal's有0.01秒,所以我认为至少有0.01秒)

这是错误的方法,因为您不能依赖系统消息队列作为精确标记的来源,因为它不能保证传递的准确性
postDelayed()
将您的可运行数据排成队列,以便在
now+delay
之前交付,但对于精确交付,并没有保证,并且可能由于许多原因发生额外延迟,这在较长时间内会给您带来明显的测量累积误差

但是,您可以使用
postdayed()
来更新UI,但要知道经过了多少时间,您应该使用方法,而不是自己的计数器


您还应按精度至少启动runnable两次,即,如果您想每分钟更新一次计时器显示,则应每分钟“勾选”两次,因此,如果消息队列处理出现任何延迟,您的UI仍应按时间每秒至少勾选一次。

首先:这种精度没有任何意义(也许你需要实时操作系统)…你可以在开始和停止时“节省”时间在“保存”和“现在”之间设置一个时间戳…现在关于从UI线程对处理程序使用postDelay:这总是不准确的…处理程序从队列1逐1拾取“作业”…即使你以给定的延迟对作业进行postDelay,如果出现问题,它也不会启动(如重新绘制用户界面)正在“工作”。。。
private void runTimer()
{
    final TextView timeView = (TextView) findViewById(R.id.time_view);
    final Handler handler = new Handler();
    handler.post(new Runnable() {
        @Override
        public void run() {
            int seconds = centiseconds / 100;
            int centisecs = centiseconds % 100;
            int hours = seconds / 3600;
            int minutes = (seconds % 3600) / 60;
            int secs = seconds % 60;

            String time = String.format("%d:%02d:%02d.%02d", hours, minutes, secs, centisecs);
            timeView.setText(time);
            if (isRunning) {
                centiseconds += 1;
            }
            handler.postDelayed(this, 10);
        }
    });
    }

}