Android之 如何在退出一个activity后,很好的取消AsyncTask继续运行

举报
chenyu 发表于 2021/07/27 00:01:47 2021/07/27
【摘要】 public class Task extends AsyncTask<Void, Void, Void>{ @Overrideprotected Void doInBackground(Void... path) {// Task被取消了,马上退出循环if(isCancelled()) return null;} @Overridepublic void on...

  
  1. public class Task extends AsyncTask<Void, Void, Void>{
  2. @Override
  3. protected Void doInBackground(Void... path) {
  4. // Task被取消了,马上退出循环
  5. if(isCancelled()) return null;
  6. }
  7. @Override
  8. public void onProgressUpdate(File... files) {
  9. // Task被取消了,不再继续执行后面的代码
  10. if(isCancelled()) return;
  11. .........
  12. }
  13. }
  14. UI线程:
  15. // 保持对Task的引用
  16. private PhotoTask task;
  17. // 1,启动新的任务
  18. task = new PhotoTask();
  19. task.execute(path);
  20. // 2, 取消任务
  21. if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) {
  22. task.cancel(true); // 如果Task还在运行,则先取消它
  23. }
  24. }
  25. }

加载网络数据、访问数据库、文件等这些问题,应该另起一个线程并且后台运行,不用让用户等待你的数据加载。
回到你的问题上来,AsyncTask用的是线程池,线程不用就会放回池中. 有新的AsyncTask会取出已有线程,之后开始执行,这就是导致你有多个AsyncTask的原因。所以即使调用AsyncTask的cancle方法,你会发现依旧结束不了这个东西。
你尝试在关闭界面的同时获得当前界面绑定的那个AsyncTask对象,并将其设置为空。如果依旧不行,那就可以考虑自己封装一个下载线程啦


文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/50974237

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。