How to cancel AsyncTask when Activity finishes?

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

In my Activity I use multiple AsyncTask classes.

How to cancel AsyncTask when Activity finishes?

3条回答
  •  清酒与你
    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 result) {
        if(!this.isCancelled()) {
            //pass data to receiver
        }
    }
    

提交回复
热议问题