取消Android中的AsyncTask类

时间:2017-11-16 06:54:51

标签: java android android-asynctask

我的类名是 GetData ,它来自 AsyncTask 。在其他课程中,我有一个来自 GetData 的对象,我用这个代码:

GetData getData = new GetData();
getData().execute();

我想在单击按钮时停止此线程。我这样做:

getData().cancel(true);

我想知道我是否在 doInBackground 中取消了线程,它是停止还是转到 onPostExecute 然后停止?

2 个答案:

答案 0 :(得分:0)

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

有关详细信息,请访问:

https://developer.android.com/reference/android/os/AsyncTask.html

就像:

onPostExecute(Result result)
{
}

如果取消asyncTask,您可以覆盖取消方法以相应地更新您的UI,如下所示:

onCancelled(Result result)
{
    // here you can handle situation according to your requirements
}

因此,您感兴趣的是,无论何时在进入onPostExecute之前取消任务,它都不会进入onPostExecute,而是会跳转到onCancelled。你也可以调用task.cancel(true);在postExecute中根据您的条件进行必要的检查。

答案 1 :(得分:-1)

From the Android documentation:

  

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

因此不会调用onPostExecute。