我正在制作一款安卓游戏,它由一个不断运行的游戏循环以及安卓UI的使用组成。因此,它们需要在单独的线程中才能同时工作。
我计划把游戏循环放在AsyncTask中,但它在developer.android文档中说
AsyncTasks最好用于短操作(最多几秒钟(
理论上,我的游戏循环将无限期运行,几乎总是持续几秒钟以上。那么异步任务是放置这个的正确位置吗?或者有其他首选方法来分割游戏循环和UI操作吗
AsyncTasks仅用于短期操作。此外,他们通常会做一些不应该干扰UI的工作。因此,"异步">和"任务">
您应该使用的是一个新线程。这称为多线程。有很多游戏框架会在安卓的用户界面上出现问题。虽然您还没有说明您所说的UI操作,但如果您计划使用android的小部件(UI(,您可以调用Activity.runOnUiThread((在UI线程上运行代码,例如,更改TextView的文本。
下面是一个关于如何在新线程中创建一个永不结束的循环的片段(或类似的东西,我不记得这个函数是否是私有的(:
new Thread(new Runnable() {
@Override
private void run() {
while(true) {
//your code goes here
}
}
});
尽管AsyncTask
允许您在UI线程上执行后台操作和发布结果,而无需操作线程,但它最好用于短操作(最多几秒钟(。
为了保持简单,您可以使用Handler
,或者更好的是,研究java.util.concurrent
包提供的各种API。
import android.os.Handler;
// Create the Handler
private Handler handler = new Handler();
// Define the code block to be executed
private Runnable runnable = new Runnable() {
@Override
public void run() {
// Insert simulation processing code here
// Repeat 60 times per second
handler.postDelayed(this, 1000 / 60);
}
};
// Start the Runnable immediately
handler.post(runnable);
请记住,多线程是容易的部分。正确的同步很难。