java - 取消异步任务的最佳方法

标签 java android android-asynctask

我最近遇到一个问题,我从 Activity 中调用异步任务并返回一些数据。我的 UI 会卡住并且收到 ANR。我似乎通过对我认为可能的两件事(我正在实现的 asynctask 和 arraylist)使用解决方案的组合来解决它。

我在 asynctask 上有一个回调来异步加载数据。我猜想,尽管我很难弄清楚,异步任务在 onpostexecute 之后被保留了?无论如何,我在 onpostexecute 中调用了 this.cancel() 。

在阅读了一些内容之后,cancel() 函数似乎安排了要取消的任务,并且在发出请求后它可能会持续存在。所以我必须问是否有更好的方法在完成后取消异步任务?在大多数情况下,cancel() 就足够了吗?有没有办法在实现回调时完全避免调用cancel()。

最佳答案

我过去所做的是设置异步任务及其调用者可以看到的同步 boolean 值。当我想取消异步任务时,我将 boolean 值设置为 false(通常命名为 active)。在异步任务中,我在各个点检查标志,如果它为假(意味着它已被取消),那么我只是返回而不完成任务的其余部分。

在不了解您的具体情况的情况下,很难更具体。

希望对你有帮助 迈克

关于java - 取消异步任务的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17751910/

相关文章:

java - jtable header 中复选框的事件

android - 从 Location 对象获取卫星数量

android - 获取 View 的当前背景id

java - 从广播接收器 android 调用 AsyncTask

java - 配置更改后 ProgressDialog 不更新(方向变为水平)

java - 尝试将消息中的字母转换为数字时没有得到任何输出

java - 当我在 DBPedia 上运行查询时 CATCH block 中的条件

java - 这些 "for"循环有什么作用?

android - 提前获取星期几

Android线程和数据库锁定