Java Handler Post Delayed任务不是准确的计时器

时间:2017-12-05 08:02:01

标签: java task handler runnable

我创建了两个处理程序,每个处理程序都有一个Runnable Tasks,它们循环运行:

// do it again 1 hundeth of a sec later
QuestionHandler.postDelayed(QuestionHandlerTask, 10); 

通过:

// and do it again 1 sec later
GameHandler.postDelayed(GameHandlerTask, 1000); 

这两项任务都从10开始并向下计数,其结果显示在标签中。我使用2个处理程序的原因是因为我希望1个计时器按秒计数,1个计数秒计数。

但是,每秒运行一次的GameHandlerTask运行速度明显快于另一个。当它达到1时,QuestionHandlerTask仍然是4秒:

enter image description here

这是一个众所周知的问题还是我做错了什么?有什么方法可以让我的定时器以相同的速度运行吗?在这种情况下(我需要精确的计时),还有其他可以使用的方法吗?

1 个答案:

答案 0 :(得分:2)

这是因为屏幕无法每秒刷新100次,这就是10毫秒计时器所发生的情况。因此,屏幕会尝试显示您告诉它显示的每个值,但只能以最大刷新率显示。

计时器不是很慢,它是无法跟上计时器的屏幕。

要解决此问题,请尝试计算在40毫秒内需要减少的数量,并启动40毫秒的计时器。这将每秒更新屏幕25次,屏幕应该能够处理。