我有一个任务,我想每毫秒更新一些内容(某种计算)。现在这就是我正在给1毫秒的延迟。-
int countertest =0;
myRunnable = new Runnable() {
@Override
public void run() {
countertest++;
System.out.println("----counter----->"+countertest);
myHandler.postDelayed(myRunnable, 1); //runs every 1 millisecond
}
};
我在点击按钮后开始myHandler
,并在1秒后停止它(removeCallbacksAndMessages(null)
)。现在myHandler
应该在一秒钟内运行1000次。但是它有时运行110次,有时119次...一些随机数。不知道为什么它不能在1秒内准确运行1000次。任何人都可以对此进行详细说明。
现在我应该怎么做才能在一秒钟内精确执行1000次?举个例子来说,如果我想在一秒钟内显示0000到1000之间的文本,或者在一秒钟内精确显示0-1000,既不超过1秒也不少于1秒。 下降投票者。在下面发表评论,以便我可以知道我错了。谢谢。
用于上述测试的设备-三星S9。
答案 0 :(得分:2)
如here所述,根本无法保证“您的”系统的毫秒精度:
以毫秒为单位返回当前时间。请注意,虽然单位为 返回值的时间是毫秒,即 值取决于基础操作系统,并且可能更大。 例如,许多操作系统以数十为单位测量时间 毫秒。
答案 1 :(得分:1)
延迟不能完全遵守我们设置的内容。例如,“ Thread.sleep(1)”可能花费超过10毫秒的时间才能执行。 “ postDelayed()”方法也是如此。分辨率取决于CPU和current_load,在这种情况下,所有文档/指南都警告该“非绝对精确”时间。