Android:当繁重的后台任务运行时,OpenGL渲染暂停

时间:2012-06-27 13:29:09

标签: android opengl-es frame-rate

我通过OpenGL渲染对象,并且在大多数情况下获得了60fps的平滑帧率。 UNTIL我在后台线程中做了很多事情,比如从REST API中获取东西,处理它,以及向图形添加对象(低优先级的东西,我更关心UI流动性)。然后渲染器将暂停很长一段时间,最多1秒(大约只要后台线程运行),然后恢复,就像没有发生任何事情一样。我注意到这是因为动画同时启动,并且在此期间卡住了。后台线程设置为最低优先级,垃圾收集最多需要100-200ms,但不是整秒。当我在后台任务的任何地方设置调试点时,渲染会继续正常,没有任何延迟。

我的沉重的后台线程是否有可能使OpenGL线程挨饿?如果是这样,我该怎么办?

1 个答案:

答案 0 :(得分:1)

当然! GPU需要提供数据,这是由CPU完成的。因此,如果系统存在瓶颈,例如I / O或CPU处理,那么GPU就无法获取。例如,动画传统上是在CPU上完成的。这就是为什么你在PC上获得了很多游戏,使用相同的图形芯片获得更高的帧速率,但具有不同的CPU。

我也同意分​​析是一个非常好的主意。如果可以的话,我会建议进行性能分析以确保它实际上是REST调用,或者REST调用是否是很多事情之一

我注意到有关REST处理的一件事,这件事发生在我身上。由于REST有时会处理很多字符串,如果你不使用StringBuilder,你最终可能会开始大量垃圾收集。但是,这听起来并不像你得到的那样。