如何在Activity结束时取消AsyncTask?

4

在我的 Activity 中,我使用了多个 AsyncTask 类。

如何在 Activity 结束时取消 AsyncTask?


1
请参见https://dev59.com/23E85IYBdhLWcg3w8IbK。 - CommonsWare
请查看以下链接,了解正确取消AsyncTask的示例:http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ - Deepak Swami
3个回答

7
我认为最好的地方来完成这个任务是在 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);
    }
}

在我的任务中,我会尽可能经常地检查是否调用了取消操作。

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

当然,不要忘记删除可能返回的数据,因为没有更多的活动来接收它。
protected void onPostExecute(List<UserStatus> result) {
    if(!this.isCancelled()) {
        //pass data to receiver
    }
}

1
当isCancelled设置为true时,onPostExecute不会被调用。相反,将调用onCancelled(Object)。 - Vihaan Verma

2

我不确定你所说的“取消”是否意味着回滚,但是在AsyncTask类中有一个cancel方法。


注:该方法可以用于取消异步任务。

任务完成后,我希望它消失。 - Pentium10

2

asynctask线程在线程池中保持活动状态,以便将来的asynctask实例可以使用。您无法删除它们。


虽然这可能是真的,但问题是关于取消任务,而不是摆脱它的线程。 - David Snabel-Caunt
请注意@Pentium10在被接受的答案中的评论 - 他希望“任务”(我认为是指“线程”)“消失”。这就是为什么我认为这个答案是最好的。 - qxotk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接