안드로이드 게임은 몇 개의 스레드를 사용해야합니까?


28

OpenGL Android 게임에는 최소한 UI 스레드와 님이 만든 렌더러 스레드가 GLSurfaceView있습니다. Renderer.onDrawFrame()최대 FPS를 얻기 위해 최소한의 작업을 수행해야합니다. 물리, AI 등은 모든 프레임을 실행할 필요가 없으므로 다른 스레드에 넣을 수 있습니다. 이제 우리는 :

  1. 렌더러 스레드-애니메이션 업데이트 및 폴리 그리기
  2. 게임 스레드-논리 및주기 물리, AI 등 업데이트
  3. UI 스레드-Android UI 상호 작용 만

UI 스레드를 차단하고 싶지 않기 때문에 게임 논리에 대해 하나 이상의 스레드를 실행합니다. 그래도 필요하지 않습니까? 렌더러 스레드에서 게임 로직을 실행해야하는 이유가 있습니까?

답변:


18

Google의 Chris Pruett는 Replica Island 블로그 에서이 문제에 대해 이야기 합니다. eglSwapBuffers ()는 GLSurfaceView 스레드에서 차단 호출이므로 다른 스레드에 게임 로직 코드가 있으면 스왑 버퍼 호출이 차단되는 동안 실행할 수 있습니다. 게임이 복잡하고 초당 60 프레임을 달성하려는 경우에 중요합니다.

Replica Island 의 소스 코드 를 다운로드하여 어떻게 수행했는지 확인할 수 있습니다. 내 게임에 대해 비슷한 세 가지 스레드를 사용하여 구현했으며 훌륭하게 작동합니다.


2

안드로이드는 표준 자바 스레드를 지원합니다. java.util.concurrent 패키지의 표준 스레드 및 도구를 사용하여 조치를 백그라운드에 넣을 수 있습니다. 유일한 제한은 백그라운드 프로세스에서 UI를 직접 업데이트 할 수 없다는 것입니다.

백그라운드 작업에서 UI를 업데이트해야하는 경우 일부 Android 특정 클래스를 사용해야합니다. 이 클래스 또는 AsyncTasks 클래스에 android.os.Handler 클래스를 사용할 수 있습니다.

자세한 내용은 다음 링크를 확인하십시오 ....

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.