【发布时间】:2013-07-19 17:16:06
【问题描述】:
我最近遇到了一个问题,我从一个活动中调用了一个异步任务并返回了一些数据。我的 UI 会冻结,我收到 ANR。我似乎已经通过对我认为可能的两件事使用解决方案的组合来解决它,包括我正在实现的 asynctask 和 arraylist。
我在 asynctask 上有一个回调来异步加载数据。我猜想,虽然我很难弄清楚,在 onpostexecute 之后 asynctask 是否被保留?无论如何,我在 onpostexecute 中调用了 this.cancel()。
在阅读了一些内容之后,似乎 cancel() 函数安排了要取消的任务,并且在发出请求后它可能会持续存在。所以我必须问有没有更好的方法在你完成后取消异步任务?在大多数情况下 cancel() 就足够了吗?有没有办法在实现回调时完全避免调用 cancel()。
【问题讨论】:
-
你在做什么(
calling this.cancel()inonPostExecute())是多余的。一旦执行到达onPostExecute(),线程就会等待垃圾收集器。如果另一个AsyncTask需要一个线程,这个线程可能会被回收。但你不应该担心它。这里的问题是:为什么你的AsyncTask输入 UI? -
@vikram 我很有可能错认为这是一个异步任务问题,它可能是我的 ArrayList。似乎安排 this.cancel 是多余的,但我不确定。在调用 onpostexecute 后,我不确定如何保留和绑定 UI。在调用 onpostexecute 之后,我的 UI ANR 才会发生。
-
您可以发布另一个问题以获得有关 ANR 问题的帮助。
-
@vikram stackoverflow.com/questions/17735305/… 我通过将 asynctaks 更改为 return 和 arraylist
> 并在 asynctask 中调用 this.cancel() 解决了这个问题
标签: java android android-asynctask