我在 android 上的实现有一个小问题。我正在用 OpenGL ES 渲染一些东西。对于每一帧,我都必须更新我的日期。所以我决定设置最大 FPS 以避免无用的计算。
但问题是,无论我设置的每秒帧数是多少,我都看不出有什么区别。即使我输入 1 fps。
这是我的代码:
long now = SystemClock.elapsedRealtime(), diff;
diff = now - CURRENT_TIME;
if (diff < MILLISECOND_PER_FRAME)
{
try
{
wait(MILLISECOND_PER_FRAME - diff);
}
catch(Exception e)
{}
now = SystemClock.elapsedRealtime();
diff = now - CURRENT_TIME;
}
CURRENT_TIME = now;
因此,那段代码似乎根本不会减慢执行速度。有什么建议吗?
而且,如果有人有疑问,对于 X fps,我将 MILLISECOND_PER_FRAME 计算为
MILLISECOND_PER_FRAME = (int)(1000.0f / X);
已解决:
好的,所以我解决了这个问题。如果您想让线程休眠特定的毫秒数,请使用 Thread.sleep(millis);。这个函数影响它运行的线程。现在我看到了 1 fps 与 25 fps 的巨大差异。
感谢所有看过这个问题的人。
最佳答案
干杯,
虽然你已经解决了这个问题,但似乎你是从错误的一端开始做的。最好保持渲染的速度,只在特定的时间间隔更新应用程序状态。这意味着没有线程休眠,只是一个条件来查看是否有足够的时间来进行更新。
这似乎是一个更简洁的解决方案。我不确定如果你中断渲染线程会对你的手机产生什么影响(因为它适用于图形硬件,你实际上也可能会停止一些其他(系统)线程)。不确定这是否是一件好事。
另一方面,对于某些不渲染任何内容的应用程序可能有意义(但通过立即从渲染函数返回会更好地实现,而无需交换前后缓冲区 - 我不确定这在 Android 上是否可行) .
关于android - android上的FPS问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448343/