高频 UI 更新 - Android

High frequency UI update - Android

我想让 8 个方块在 red/black 之间周期性地改变颜色。 我使用 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 纳秒?

整个 Android UI 运行s 在 60Hz - 每秒 60 次更新。这意味着重绘之间的最短时间为 16 毫秒。你不能 运行 它以更高的帧率。人眼也无法看到频率比这高得多的变化。

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

我不确定您到底想完成什么,但我可以肯定您尝试的方式有误。

另外:我注意到您的计时器任务发布到处理程序。这意味着您的计时器任务将告诉主线程 运行 一些事情,而计时器任务是 运行ning 以纳秒为单位。你基本上会用 "run this task" 消息阻塞你的主线程,然后当事件队列变得如此庞大以至于无法再添加(可能需要几分钟)时最终会因 OOM 错误而崩溃,因为有没有办法用线程切换开销足够快地处理它们。

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