Java 处理程序 Post 延迟任务是不准确的计时器
Java Handler Post Delayed task is not accurate timer
我创建了两个处理程序,每个处理程序都有可运行的任务,运行 循环通过:
// 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 个以秒为单位倒计时。
但是,运行s 每秒一次 运行s 的 GameHandlerTask 明显快于另一个。当它达到 1 时,QuestionHandlerTask 仍处于 4 秒:
这是一个众所周知的问题还是我做错了什么?有什么方法可以让我的计时器 运行 保持相同的速度吗?在这种情况下(我想要精确计时),我可以使用其他更好的方法吗?
这是因为屏幕无法每秒刷新 100 次,这正是 10 毫秒计时器所发生的情况。因此屏幕会尝试显示您告诉它显示的每个值,但只能以其最大刷新率显示。
不是定时器慢,是屏幕跟不上定时器。
为了解决这个问题,请尝试计算数字在 40 毫秒内需要下降多少,然后您启动一个 40 毫秒的计时器。这将每秒更新屏幕 25 次,屏幕应该能够处理。
我创建了两个处理程序,每个处理程序都有可运行的任务,运行 循环通过:
// 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 个以秒为单位倒计时。
但是,运行s 每秒一次 运行s 的 GameHandlerTask 明显快于另一个。当它达到 1 时,QuestionHandlerTask 仍处于 4 秒:
这是一个众所周知的问题还是我做错了什么?有什么方法可以让我的计时器 运行 保持相同的速度吗?在这种情况下(我想要精确计时),我可以使用其他更好的方法吗?
这是因为屏幕无法每秒刷新 100 次,这正是 10 毫秒计时器所发生的情况。因此屏幕会尝试显示您告诉它显示的每个值,但只能以其最大刷新率显示。
不是定时器慢,是屏幕跟不上定时器。
为了解决这个问题,请尝试计算数字在 40 毫秒内需要下降多少,然后您启动一个 40 毫秒的计时器。这将每秒更新屏幕 25 次,屏幕应该能够处理。