如何杀死 Activity 和 AsyncTask

How to kill a Activity and the AsyncTask

我正在开发一个小游戏。当我按下后退按钮时,activity 将显示 window 取消游戏 yes/no

如果我按“是”,我会通过 finish() 回到我的 MainActivity

我的问题是,我无法再次开始游戏,因为我的 Asynctask 没有完成。我首先必须在 "recently used apps".

中终止应用程序

您需要在Activity的onStop中取消AsyncTask

你可以参考这个link来取消你的异步任务

您需要执行两件事来停止 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 的以下描述:

Cancelling a task
A task can be cancelled at any time by invoking cancel(boolean). Invoking this method will cause subsequent calls to isCancelled() to return true. After invoking this method, onCancelled(Object), instead of onPostExecute(Object) will be invoked after doInBackground(Object[]) returns. To ensure that a task is cancelled as quickly as possible, you should always check the return value of isCancelled() periodically from doInBackground(Object[]), if possible (inside a loop for instance.)

我建议使用表面而不是 activity 来编写实际游戏部分的代码,这可能会帮助您解决这个问题。

在代码中处理点击

  • 1> 调用 finish(),并在 onStop() 或 onDestroy() 上使用 AsyncTask.cancel() 方法。
  • 或2>使用AsyncTask.cancel(),在AsyncTask.onCancelled()方法中,调用finish()结束activity.

1> 常用。