4

In my Activity I use multiple AsyncTask classes.

How to cancel AsyncTask when Activity finishes?

Pentium10
  • 204,586
  • 122
  • 423
  • 502
  • 1
    See http://stackoverflow.com/questions/2531336/asynctask-wont-stop-even-when-the-activity-has-destroyed – CommonsWare Mar 28 '10 at 14:26
  • check this for a good example on correct way to cancel an asynctask http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ – Deepak Swami Jun 29 '16 at 17:09

3 Answers3

7

i think the best place to do this is onStop

protected void onStop() {
    super.onStop();

    /*
    * The device may have been rotated and the activity is going to be destroyed
    * you always should be prepared to cancel your AsnycTasks before the Activity
    * which created them is going to be destroyed.
    * And dont rely on mayInteruptIfRunning
    */
    if (this.loaderTask != null) {
        this.loaderTask.cancel(false);
    }
}

in my Task i then check as often as possible if cancel was called

protected String doInBackground(String... arg0) {
    if (this.isCancelled()) {
        return null;
    }
}

and of course dont forget to drop data that maybe returned since there's no more Activity to receive it

protected void onPostExecute(List<UserStatus> result) {
    if(!this.isCancelled()) {
        //pass data to receiver
    }
}
martyglaubitz
  • 992
  • 10
  • 21
2

I don't understand if your "cancel" means rollback but you have a cancel method on the AsyncTask class.

Macarse
  • 91,829
  • 44
  • 175
  • 230
2

The asynctask thread is kept alive in a thread pool for future istances of AsyncTask. You can't remove them.

STT LCU
  • 4,348
  • 4
  • 29
  • 47
  • While this may be true, the question is about cancelling the task, not getting rid of its thread. – David Snabel-Caunt Oct 17 '11 at 11:27
  • Note @Pentium10 comment in the accepted answer - He wants the "task" (I believe meaning "thread") to "disappear. This is why I think this answer is best. – qxotk Apr 25 '12 at 22:27