Android之 如何在退出一个activity后,很好的取消AsyncTask继续运行
2016-03-24 19:07
1696 查看
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对象,并将其设置为空。如果依旧不行,那就可以考虑自己封装一个下载线程啦
相关文章推荐
- android 按钮变化颜色
- Android官方开发文档Training系列课程中文版:管理Activity的生命周期之启动一个Activity
- Android中为控件之间添加分割线
- android常用颜色配置xml
- android studio 获取sha1 和 md5 的值
- Android studio如何集成ShareSDK详解
- Android数据库 之 SQLite数据库
- eclispe快捷键
- as快捷键
- android学习之蓝牙 - 蓝牙连接打印机Demo
- android依赖库(依赖工程)导入
- android Music 中如何添加设置双卡铃声的菜单
- android中fragment与activity之间通信原理以及例子
- 按下更新按钮,每隔1S自动更新进度条,更新到100%自动消失
- [Android] AndroidManifest.xml出现问题
- 进入应用动画闪屏, android5.0初始动画,不执行解决等方案总结
- Android - MyFragment.java
- Android版本和API Level对应关系
- Android HAL的STUB的具体处理
- Android java web 环境变量配置