Скільки ниток повинна використовувати гра для Android?


28

Як мінімум, у грі OpenGL для Android є нитка інтерфейсу користувача та нитка Renderer, створена компанією GLSurfaceView. Renderer.onDrawFrame()повинні робити мінімум роботи, щоб отримати найвищий FPS. Фізика, AI тощо не потрібно запускати кожен кадр, тому ми можемо помістити їх в інший потік. Тепер ми маємо:

  1. Нитка рендерера - оновіть анімації та намалюйте поліси
  2. Ігровий потік - логіка та періодичні оновлення фізики, AI тощо
  3. Потік інтерфейсу користувача - лише взаємодія з інтерфейсом інтерфейсу Android

Оскільки ви ніколи не хочете блокувати потік інтерфейсу, я запускаю ще одну нитку для логіки гри. Можливо, це не обов’язково? Чи коли-небудь є причина запускати логіку гри в потоці візуалізації?

Відповіді:


18

Кріс Прюет від Google розповідає про це питання у своєму блозі на острові Репліка . Оскільки eglSwapBuffers () є блокуючим викликом у потоці GLSurfaceView, наявність логічного коду гри в іншому потоці дозволяє йому запускатись, поки виклик буферів підкачки блокується. Це важливо, якщо ваша гра складна і ви хочете досягти 60 кадрів в секунду.

Ви можете завантажити вихідний код для острова Репліка і подивитися, як вони це зробили. Я реалізував щось подібне для своєї гри (з трьома нитками, про які ви говорили), і це чудово працює.


2

Android підтримує стандартні потоки Java. Ви можете використовувати стандартні потоки та інструменти з пакету java.util.concurrent, щоб розмістити дії на другий план. Єдине обмеження полягає в тому, що ви не можете безпосередньо оновити інтерфейс користувача у фоновому режимі.

Якщо вам потрібно оновити інтерфейс користувача із фоновим завданням, вам потрібно скористатись певними класами Android. Ви можете використовувати клас android.os.Handler для цього або клас AsyncTasks.

Для отримання більш детальної інформації перегляньте наступне посилання ....

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.