【发布时间】:2018-07-17 14:12:36
【问题描述】:
我有一个任务,我想每毫秒更新一次(某种计算)。现在这是我正在做的,延迟 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 次。谁能详细说明一下。
我现在应该怎么做才能在 1 秒内执行 1000 次?举例来说,如果我想在一秒钟内显示从 0000 到 1000 的文本,或者在 1 秒内准确地打印 0-1000,不超过 1 秒也不少于 1 秒。 反对者请。在下面发表评论,以便我知道我错在哪里。谢谢。
用于上述测试的设备 - 三星 S9。
【问题讨论】:
-
如果您确实需要经常执行某些操作,最好使用循环并使用
System.nanotime检查是否经过了足够的时间 - 这仍然可能不是精确的 1000,因为这仍然取决于系统,但在大多数情况下它应该运行良好。此外,您的代码不是每 1 毫秒执行一次,而是执行它需要 1 毫秒 + 时间。 -
我不认为递增整数需要 100s 毫秒 @GotoFinal
-
10ms* Ofc 它没有,但只是说它并不精确,并且递增整数只是 3 个操作之一 - 创建新任务以延迟可能需要一点时间 - 但也可能更少超过 1 毫秒。所以只有大约 900 的结果也是可能的。
-
是的,但 myHandler 使 runnable 只运行大约 100-120 次。我正在使用
Samsung S9,它有很好的内存。 -
你已经回答了为什么,如果你真的需要这样的东西,我只是给了你另一个想法——创建一个循环。但真正的问题似乎是:为什么您需要经常在手机上执行某些操作?
标签: java android handler runnable android-handler