我在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相比时的巨大差异。
感谢所有看过这个问题的人。
答案 0 :(得分:0)
干杯,
虽然你已经解决了这个问题,但似乎你是从错误的一端做到的。将渲染保持在它的速度并且仅以特定间隔更新应用程序状态会更好。这意味着没有线程休眠,只是一个条件,看看是否有足够的时间来进行更新。
这似乎是一个更清洁的解决方案。如果你制动渲染线程,我不确定它会对你的手机产生什么影响(因为它与图形硬件配合使用,实际上你可能会拖延一些其他(系统)线程)。不确定这是否是一件好事。
另一方面,对于某些应用程序而言,渲染任何东西都没有意义(但是通过立即从渲染函数返回可以实现更好,而不需要交换前后缓冲区 - 我不确定在Android上是否可行)