我正在Android中编写一个简单的游戏,并想知道是否有任何理由选择产生线程来运行游戏还是使用处理程序。在我以前的应用程序中,我总是使用处理程序,因为我认为它们更有效但是Lunar Lander示例游戏使用单独的线程,所以我不确定哪个是最好的。
任何人都可以解释这个问题吗?
答案 0 :(得分:1)
如果您对技术差异感到疑惑,我不会看到Lunar Lander运行的Thread
与Runnable
使用的Handler
有什么不同,除了Runnable
在UI线程上运行。 Lunar Lander使用Thread
的原因是从UI线程中获取执行。
原因是通常的游戏架构想要通过主循环运行,该主循环更新然后尽快刷新屏幕。此外,大多数游戏并没有真正使用UI,而是直接绘制到画布/表面。
如果你正在做这些事情,你会想要为主循环使用一个单独的线程。如果你把循环放在UI线程中,你会得到一个ANR。处理程序可用于将数据发送回UI线程,但在游戏的游戏部分(菜单,加载屏幕等不同)中,通常不会使用太多。
答案 1 :(得分:1)
你不想在UI线程中做任何密集的事情,否则Android操作系统会干预你的主游戏循环很可能是非常耗费资源的。
来自Android文档的“总而言之,对于应用程序UI的响应性来说,保持UI线程畅通无阻是至关重要的。如果要执行长时间的操作,则应确保在额外的线程(后台或工作线程)中执行它们。” / p>