¿Cuántos hilos debe usar un juego de Android?

28

Como mínimo, un juego de Android OpenGL tiene un subproceso de interfaz de usuario y un subproceso Renderer creado por GLSurfaceView. Renderer.onDrawFrame()debería estar haciendo un mínimo de trabajo para obtener el FPS más grande. La física, la IA, etc. no necesitan ejecutar cada cuadro, por lo que podemos ponerlos en otro hilo. Ahora tenemos:

  1. Subproceso de renderizador: actualice animaciones y dibuje polys
  2. Tema del juego: actualizaciones de lógica y física periódica, IA, etc.
  3. Subproceso de interfaz de usuario: solo interacción con la interfaz de usuario de Android

Como nunca quieres bloquear el hilo de la interfaz de usuario, ejecuto un hilo más para la lógica del juego. ¿Quizás eso no es necesario? ¿Hay alguna razón para ejecutar la lógica del juego en el hilo del renderizador?

kvance
fuente

Respuestas:

18

Chris Pruett de Google habla sobre este tema en su blog de Replica Island . Debido a que eglSwapBuffers () es una llamada de bloqueo en el hilo GLSurfaceView, tener un código lógico del juego en otro hilo le permite ejecutarse mientras la llamada de los buffers de intercambio está bloqueándose. Esto es importante si tu juego es complejo y quieres alcanzar 60 cuadros por segundo.

Puede descargar el código fuente de Replica Island y ver cómo lo hicieron. He implementado algo similar para mi juego (con los tres hilos de los que hablaste) y funciona muy bien.

Firas Assaad
fuente
2

Android es compatible con hilos estándar de Java. Puede usar subprocesos estándar y las herramientas del paquete java.util.concurrent para poner acciones en segundo plano. La única limitación es que no puede actualizar directamente la IU desde el proceso en segundo plano.

Si necesita actualizar la IU desde una tarea en segundo plano, debe usar algunas clases específicas de Android. Puede usar la clase android.os.Handler para esto o la clase AsyncTasks.

Para más detalles, consulte el siguiente enlace ...

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

Ratan Sharma
fuente