处理程序在1秒内未运行1000次

时间:2018-07-17 14:12:37

标签: java android handler runnable android-handler

我有一个任务,我想每毫秒更新一些内容(某种计算)。现在这就是我正在给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。

2 个答案:

答案 0 :(得分:2)

here所述,根本无法保证“您的”系统的毫秒精度:

  

以毫秒为单位返回当前时间。请注意,虽然单位为   返回值的时间是毫秒,即   值取决于基础操作系统,并且可能更大。   例如,许多操作系统以数十为单位测量时间   毫秒。

答案 1 :(得分:1)

延迟不能完全遵守我们设置的内容。例如,“ Thread.sleep(1)”可能花费超过10毫秒的时间才能执行。 “ postDelayed()”方法也是如此。分辨率取决于CPU和current_load,在这种情况下,所有文档/指南都警告该“非绝对精确”时间。