您的位置:首页 > 其它

退出Activity时AsynTask的处理

2016-04-12 11:48 197 查看
当进入一个详细页面,这时程序会弹出一个对话框加载网络数据,可是发现用户经常因为数据加载慢,就快速的退出这个页面,这样反复来回几次后,发现AsyncTask不再继续加载,而是慢慢的等待,查了下个数,是前几个没有及时的关闭,导致当前的异步任务一直在等待。

所以我们在退出Activity时,如果AsynTask还在运行,我们应该取消AsynTask的加载,以便为下次的加载提供通道,不阻塞队列,代码如下:

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,在onDestory()方法中取消正在执行的任务

if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) {
task.cancel(true); // 如果Task还在运行,则先取消它
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: