Android之 如何在退出一个activity后,很好的取消AsyncTask继续运行
【摘要】 public class Task extends AsyncTask<Void, Void, Void>{ @Overrideprotected Void doInBackground(Void... path) {// Task被取消了,马上退出循环if(isCancelled()) return null;} @Overridepublic void on...
-
-
public class Task extends AsyncTask<Void, Void, Void>{
-
-
@Override
-
protected Void doInBackground(Void... path) {
-
// Task被取消了,马上退出循环
-
if(isCancelled()) return null;
-
}
-
-
@Override
-
public void onProgressUpdate(File... files) {
-
// Task被取消了,不再继续执行后面的代码
-
-
if(isCancelled()) return;
-
.........
-
}
-
}
-
-
UI线程:
-
-
// 保持对Task的引用
-
-
private PhotoTask task;
-
-
// 1,启动新的任务
-
task = new PhotoTask();
-
task.execute(path);
-
-
// 2, 取消任务
-
-
if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) {
-
task.cancel(true); // 如果Task还在运行,则先取消它
-
}
-
-
-
}
-
}
加载网络数据、访问数据库、文件等这些问题,应该另起一个线程并且后台运行,不用让用户等待你的数据加载。
回到你的问题上来,AsyncTask用的是线程池,线程不用就会放回池中. 有新的AsyncTask会取出已有线程,之后开始执行,这就是导致你有多个AsyncTask的原因。所以即使调用AsyncTask的cancle方法,你会发现依旧结束不了这个东西。
你尝试在关闭界面的同时获得当前界面绑定的那个AsyncTask对象,并将其设置为空。如果依旧不行,那就可以考虑自己封装一个下载线程啦
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/50974237
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)