【问题标题】:Android: Properly destroying asyncTask?Android:正确销毁 asyncTask?
【发布时间】:2011-04-21 09:14:58
【问题描述】:

我目前正在使用asyncTask() 在我的活动进行时对位图图像进行一些背景交换,并且一切正常;直到我结束任务所在的活动。任务的线程进入“等待”状态而不是被销毁?我取消了,并检查了.isCancelled() 的返回值。这不会是一个真正的问题,除非当我从 MAIN 活动再次重新启动我的活动时,它实际上会为新的 asyncTask() 创建一个新线程;从而让那个老家伙在后台“等待”?这是一个错误,还是我只是错误地使用了这个功能?

【问题讨论】:

  • 查看 Droid-fu 库。它简化了使用 asyncTask 的工作。

标签: android thread-safety android-asynctask


【解决方案1】:

AsyncTask 使用线程池。您在调试面板中看到 4/5 异步任务是正常的。只需确保您的异步任务不持有对活动的强引用(尝试使这些异步任务成为静态内部类(或事件独立类)并让它们持有对活动的弱引用而不是强引用。

【讨论】:

  • 那么理论上这是否会导致某种线程混乱,即当创建新活动并希望使用该Tid 时,有一个线程已经处于活动状态并等待Tid
【解决方案2】:

我认为您应该在 doInBackground 函数中使用静态标志变量来终止操作或循环。这样你就可以完成你的任务

【讨论】:

  • 我试过这个,结合 isCancelled() 无济于事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 2017-01-20
相关资源
最近更新 更多