我想使8个正方形在红色/黑色之间定期更改颜色。
我使用timer.schedule
完成此操作,其周期时间以毫秒为单位,并且可以正常工作
然后我意识到我需要在两次转换之间使用较小的时间(例如纳秒)。
为此,我编写了以下代码:
timerTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run(){
//CODE OF THE TASK.
}
});
}
};
//To make schedule this task in 5 nanoseconds I use this!
exec = new ScheduledThreadPoolExecutor(1);
exec.scheduleAtFixedRate(timerTask, 0, 5, TimeUnit.NANOSECONDS);
但是当我运行它时,UI并没有更新(似乎被卡住了),但是在logcat中,所有日志的打印速度都非常快。如何实现定期x纳秒执行任务?
答案 0 :(得分:1)
整个Android UI的运行频率为60Hz-每秒更新60次。这意味着重绘之间的最短时间为16 ms。您不能以更高的帧速率运行它。人眼也看不见变化的频率要高得多。
iOS和大多数视频游戏机的刷新率也为60 Hz。您会发现很少甚至没有系统运行速度更快。
我不确定您到底要实现什么目标,但是我可以肯定您正在尝试以错误的方式做到这一点。
也:我注意到您的计时器任务发布到处理程序。这意味着您的计时器任务将告诉主线程运行某些内容,而计时器任务将在十亿分之一秒内运行。基本上,您的主线程将充满“运行此任务”消息,然后在事件队列变得如此庞大以至于无法再添加(可能需要几分钟)时最终因OOM错误而崩溃,因为您无法通过线程切换开销来足够快地处理它们。
答案 1 :(得分:0)
经过大量研究,我意识到,为了使视图如此快地刷新,我需要使用SurfaceView和Thread来使UI重绘非常快,我对此一无所知。感谢您的帮助