我正在创建一个游戏,当用户与GUI进行交互时,计算机在后台任务中发现拼图的解决方案。用户可以随时选择结束游戏,此时我想停止后台任务并检索找到的解决方案。在请求时完成一个AsyncTask
这一切都工作正常,但我不能强制后台任务结束时,用户选择?!?当用户选择“完成”我有以下几点:
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线程似乎问我同样的问题,但没有解决办法...我画坯用我所有的研究迄今任何帮助,将不胜感激。
不知道Android的,但是,只有一个CPU在一个典型的系统/ OS,这样的代码肯定会永远挂在这个循环中,如果后台任务必须比前景更低的优先级 - 后台任务会根本没有CPU,所以永远不会检查它的取消标志。最好等待后台任务停止时发出的信号。然后后台线程可以等待它自己的事件,直到处理完当前结果为止,然后可以发信号通知该事件以使后台继续。作为一个测试 - 在循环中加入一个短暂的sleep()。 –
好吧,我按照你的建议在while循环中加入了一个睡眠,但它仍然只是坐在那里,从来没有发现“完成”状态?我相信这个问题很可能与“K-ballo”在下面提到的有关。 – MisterWeary