我正在制作一个Android游戏,该游戏由一个不断运行的游戏循环以及对android UI东西的使用组成。因此,它们需要处于单独的线程中才能并行工作。
我打算将游戏循环放入AsyncTask中,但在developer.android文档中说
理想情况下,AsyncTasks应该用于短操作(最多几秒钟)。
理论上,我的游戏循环将无限期地运行,并且几乎总是持续几秒钟。那么asynctask是放置它的正确位置吗,还是还有另一种首选的方法来拆分游戏循环和UI操作
答案 0 :(得分:1)
AsyncTasks 仅用于简短操作,如文档所述。此外,他们通常会做一些不应该干扰UI的工作。因此,“异步” 和“任务” 。
您应该使用的是新线程。这称为多线程。那里有很多游戏框架,这些框架会与Android的UI产生问题。尽管您尚未说明要谈论的是什么UI操作,但是如果您打算使用android的widgets(UI),则可以调用 Activity.runOnUiThread()在UI线程上运行代码,例如,更改TextView的文本。
以下是有关如何在新线程中创建永无止境的循环的摘要(或类似的东西,我不记得该函数是否私有):
new Thread(new Runnable() {
@Override
private void run() {
while(true) {
//your code goes here
}
}
});
答案 1 :(得分:1)
尽管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);
请记住,多线程是最简单的部分。正确的同步很难。