Berapa banyak utas yang harus digunakan game Android?


28

Minimal, sebuah gim Android OpenGL memiliki utas UI dan utas Renderer dibuat oleh GLSurfaceView. Renderer.onDrawFrame()harus melakukan pekerjaan minimum untuk mendapatkan FPS tertinggi. Fisika, AI, dll. Tidak perlu menjalankan setiap bingkai, jadi kita bisa meletakkannya di utas lain. Sekarang kita punya:

  1. Renderer thread - Perbarui animasi dan gambar polis
  2. Utas permainan - Logika & fisika periodik, AI, dll. Pembaruan
  3. Utas UI - Hanya interaksi Android UI

Karena Anda tidak ingin memblokir utas UI, saya menjalankan satu utas lagi untuk logika game. Mungkin itu tidak perlu? Apakah ada alasan untuk menjalankan logika game di utas renderer?

Jawaban:


18

Google Chris Pruett berbicara tentang masalah ini di blognya di Pulau Replika . Karena eglSwapBuffers () adalah panggilan pemblokiran di utas GLSurfaceView, memiliki kode logika permainan di utas lain memungkinkannya dijalankan saat panggilan swap buffer memblokir. Ini penting jika gim Anda rumit dan Anda ingin mencapai 60 frame per detik.

Anda dapat mengunduh kode sumber untuk Pulau Replika dan melihat bagaimana mereka melakukannya. Saya telah mengimplementasikan sesuatu yang serupa untuk permainan saya (dengan tiga utas yang Anda bicarakan) dan itu bekerja dengan baik.


2

Android mendukung Java Threads standar. Anda dapat menggunakan Thread standar dan alat-alat dari paket java.util.concurrent untuk menempatkan tindakan ke latar belakang. Satu-satunya batasan adalah Anda tidak dapat memperbarui UI secara langsung dari proses latar belakang.

Jika Anda perlu memperbarui UI dari tugas latar belakang, Anda perlu menggunakan beberapa kelas khusus Android. Anda dapat menggunakan kelas android.os.Handler untuk ini atau kelas AsyncTasks.

Untuk lebih jelasnya silakan lihat tautan berikut ....

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.