How to cancel AsyncTask when Activity finishes?

后端 未结 3 2016
伪装坚强ぢ
伪装坚强ぢ 2020-12-16 07:23

In my Activity I use multiple AsyncTask classes.

How to cancel AsyncTask when Activity finishes?

相关标签:
3条回答
  • 2020-12-16 07:50

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

    0 讨论(0)
  • 2020-12-16 07:57

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

    0 讨论(0)
  • 2020-12-16 08:02

    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
        }
    }
    
    0 讨论(0)
提交回复
热议问题