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