我的类名是 GetData ,它来自 AsyncTask 。在其他课程中,我有一个来自 GetData 的对象,我用这个代码:
GetData getData = new GetData();
getData().execute();
我想在单击按钮时停止此线程。我这样做:
getData().cancel(true);
我想知道我是否在 doInBackground 中取消了线程,它是停止还是转到 onPostExecute 然后停止?
答案 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。