Android游戏应使用多少个线程?


28

至少,一个OpenGL Android游戏具有一个UI线程和一个由创建的Renderer线程GLSurfaceViewRenderer.onDrawFrame()应该做最少的工作以获得最佳的FPS。物理,AI等不需要运行每一帧,因此我们可以将它们放在另一个线程中。现在我们有:

  1. 渲染器线程-更新动画并绘制多边形
  2. 游戏线程-逻辑与周期性物理学,AI等更新
  3. UI线程-仅适用于Android UI交互

由于您永远不想阻塞UI线程,因此我为游戏逻辑运行了一个线程。也许那不是必需的?有没有理由在渲染器线程中运行游戏逻辑?

Answers:


18

Google的Chris Pruett在他的副本岛博客中谈到了这个问题。因为eglSwapBuffers()是GLSurfaceView线程中的阻塞调用,所以在另一个线程中具有游戏逻辑代码允许它在交换缓冲区调用阻塞时运行。如果您的游戏很复杂,并且您想达到每秒60帧,这一点很重要。

您可以下载副本岛的源代码,并查看它们的工作方式。我已经为我的游戏实现了类似的功能(使用了您提到的三个线程),并且效果很好。


2

Android支持标准Java线程。您可以使用标准线程和包java.util.concurrent中的工具将操作置于后台。唯一的限制是您不能从后台进程直接更新UI。

如果需要从后台任务更新UI,则需要使用一些Android特定的类。您可以为此使用类android.os.Handler或将AsyncTasks类使用。

有关更多详细信息,请查看以下链接。

http://mindstick.com/Articles/7a9205de-bae7-48ba-81b5-2b2ec161d672/?Thread%20in%20Android

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.