Java 取消Android中的AsyncTask类

Java 取消Android中的AsyncTask类,java,android,android-asynctask,Java,Android,Android Asynctask,我有一个类名是GetData,它扩展自AsyncTask。在另一个类中,我有一个来自GetData的对象,我使用以下代码: GetData getData = new GetData(); getData().execute(); 我想在单击按钮时停止此线程。我是这样做的: getData().cancel(true); 我想知道我是否在线程处于doInBackground时取消了它,它停止了,还是转到onPostExecute然后停止了? 调用此方法将导致在doInBackground(O

我有一个类名是GetData,它扩展自AsyncTask。在另一个类中,我有一个来自GetData的对象,我使用以下代码:

GetData getData = new GetData();
getData().execute();
我想在单击按钮时停止此线程。我是这样做的:

getData().cancel(true);
我想知道我是否在线程处于doInBackground时取消了它,它停止了,还是转到onPostExecute然后停止了?

调用此方法将导致在doInBackground(Object[])返回后在UI线程上调用onCancelled(Object)。调用此方法可确保永远不会调用onPostExecute(对象)


因此,不会调用onPostExecute。

通过调用cancel(布尔值),可以随时取消任务。调用此方法将导致对isCancelled()的后续调用返回true。调用此方法后,将在doInBackground(Object[])返回后调用onCancelled(Object),而不是onPostExecute(Object)。为了确保尽快取消任务,您应该始终定期检查doInBackground(Object[])中isCancelled()的返回值,如果可能的话(例如在循环中)

欲了解更多详情,请访问:

就像:

onPostExecute(Result result)
{
}
当您的异步任务被取消时,您可以覆盖cancel的方法以相应地更新UI,如下所示:

onCancelled(Result result)
{
    // here you can handle situation according to your requirements
}
所以这里您感兴趣的一点是,每当您在进入onPostExecute之前取消任务时,它不会进入onPostExecute,而是会跳到onCancelled。您也可以调用task.cancel(true);在POST中,根据您的情况通过应用所需的检查执行