在请求时完成AsyncTask

时间:2011-10-01 06:44:01

标签: android multithreading android-asynctask

我正在创建一个游戏,用户与GUI交互,同时计算机在后台任务中找到解谜的解决方案。用户可以随时选择结束游戏,此时我想停止我的后台任务并检索它找到的解决方案。

这一切都正常,但是当用户选择时我不能强制后台任务结束?!?当用户选择“完成”时,我有以下内容:

computerSolutionTask.cancel(true);

// ...disable some GUI buttons etc...

while (computerSolutionTask.getStatus() != AsyncTask.Status.FINISHED){
   // ...do nothing...
}
txt_computer.setText(computerSolutionTask.get());

在我的AsyncTask类中,我定期检查“isCancelled()”但它似乎挂在上面包含的while循环中。

我觉得我可能会对这整个事情有点不正确,因为我真的不想取消后台任务,我只是希望它能在任何地方完成并返回它所拥有的内容。

This 主题似乎在问我同样的问题,但是没有解决方案......到目前为止,我的所有研究都在画空白,任何帮助都会非常感激

2 个答案:

答案 0 :(得分:1)

已取消的正在运行的AsyncTask将永远不会达到onPostExecute,因此永远不会“完成”。如果您的特定逻辑要求它使用常规同步方法,则无论如何都不需要等待它。

答案 1 :(得分:0)

您需要将条件放在doInBackground()方法中以检查AsyncTask是否被取消或处于运行状态。

 protected Object doInBackground(Object... x) 
    { 
        while (/* condition */)
        {

        // work...

        if (isCancelled())  break;

        } return null; }