【发布时间】:2015-02-08 11:57:38
【问题描述】:
我正在开发一个小游戏。当我按下后退按钮时,activity 将显示一个窗口取消游戏yes/no。
如果我按是,我会通过finish() 回到我的MainActivity。
我的问题是,我无法再次开始游戏,因为我的 Asynctask 尚未完成。我首先必须在“最近使用的应用程序”中杀死该应用程序。
【问题讨论】:
标签: android android-activity android-asynctask
我正在开发一个小游戏。当我按下后退按钮时,activity 将显示一个窗口取消游戏yes/no。
如果我按是,我会通过finish() 回到我的MainActivity。
我的问题是,我无法再次开始游戏,因为我的 Asynctask 尚未完成。我首先必须在“最近使用的应用程序”中杀死该应用程序。
【问题讨论】:
标签: android android-activity android-asynctask
您需要取消Activity的onStop中的AsyncTask。
【讨论】:
您需要实现两件事来停止 AsyncTask 的执行:
1. 从您要停止执行的位置调用 AsyncTask 的 Cancel() 方法。这可能在您的 Activity 的 onStop() 中,如下所示:asyncTask.cancel(true);
2. 现在您必须使用 doInBackground 方法中的 isCancelled 方法检查 AsyncTask 是否被取消。
protected Object doInBackground(Object... x) {
while (/* condition */)
{
...
if (isCancelled())
break;
}
return null;
}
为什么?由于 Android 文档对 AsyncTask 的以下描述:
取消任务
可以随时通过调用来取消任务 取消(布尔值)。调用此方法将导致后续调用 isCancelled() 返回真。调用此方法后, onCancelled(Object),而不是 onPostExecute(Object) 将被调用 在 doInBackground(Object[]) 返回之后。为了确保一个任务 尽快取消,您应该经常检查退货 isCancelled() 的值定期从 doInBackground(Object[]),如果 可能的(例如在循环内。)
【讨论】:
你可以参考这个link来取消你的异步任务
【讨论】:
我建议使用表面来编码实际的游戏部分而不是活动,这可能会帮助您解决这个问题。
【讨论】:
在处理点击的代码中
1> 是常用的。
【讨论】: