我正在创建一个游戏,用户与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 主题似乎在问我同样的问题,但是没有解决方案......到目前为止,我的所有研究都在画空白,任何帮助都会非常感激
答案 0 :(得分:1)
已取消的正在运行的AsyncTask
将永远不会达到onPostExecute
,因此永远不会“完成”。如果您的特定逻辑要求它使用常规同步方法,则无论如何都不需要等待它。
答案 1 :(得分:0)
您需要将条件放在doInBackground()方法中以检查AsyncTask是否被取消或处于运行状态。
protected Object doInBackground(Object... x)
{
while (/* condition */)
{
// work...
if (isCancelled()) break;
} return null; }