是否应在AsyncTask内放置游戏循环

时间:2018-08-04 18:37:41

标签: android android-asynctask

我正在制作一个Android游戏,该游戏由一个不断运行的游戏循环以及对android UI东西的使用组成。因此,它们需要处于单独的线程中才能并行工作。

我打算将游戏循环放入AsyncTask中,但在developer.android文档中说

  

理想情况下,AsyncTasks应该用于短操作(最多几秒钟)。

理论上,我的游戏循环将无限期地运行,并且几乎总是持续几秒钟。那么asynctask是放置它的正确位置吗,还是还有另一种首选的方法来拆分游戏循环和UI操作

2 个答案:

答案 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);

请记住,多线程是最简单的部分。正确的同步很难。

相关问题