高频UI更新-Android

时间:2019-07-19 21:41:38

标签: android scheduled-tasks periodic-task

我想使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纳秒执行任务?

2 个答案:

答案 0 :(得分:1)

整个Android UI的运行频率为60Hz-每秒更新60次。这意味着重绘之间的最短时间为16 ms。您不能以更高的帧速率运行它。人眼也看不见变化的频率要高得多。

iOS和大多数视频游戏机的刷新率也为60 Hz。您会发现很少甚至没有系统运行速度更快。

我不确定您到底要实现什么目标,但是我可以肯定您正在尝试以错误的方式做到这一点。

也:我注意到您的计时器任务发布到处理程序。这意味着您的计时器任务将告诉主线程运行某些内容,而计时器任务将在十亿分之一秒内运行。基本上,您的主线程将充满“运行此任务”消息,然后在事件队列变得如此庞大以至于无法再添加(可能需要几分钟)时最终因OOM错误而崩溃,因为您无法通过线程切换开销来足够快地处理它们。

答案 1 :(得分:0)

经过大量研究,我意识到,为了使视图如此快地刷新,我需要使用SurfaceView和Thread来使UI重绘非常快,我对此一无所知。感谢您的帮助