android开发中终止正在进行的Asynctask

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 12:39 我要评论(0)

Android1.5版本后,提供了AsyncTask这个类用来实现非阻塞的操作,比如下载列表数据等。AsyncTask虽然解决了UI主线程阻塞的问题,但是也有一个众所周知的问题:就是一旦运行了,就没办法停止下来。

如下图所示,系统正在获取当前目录下的子目录和图片的时候,数据还没完全加载完毕。这个时候,用户等不耐烦了点击某个子目录(比如DCIM这个目录),系统会启动一个新的AsyncTask去获取该子目录下的数据。但是由于之前的Task没法停止,我们常常会发现一个比较恼火的问题,就是原本属于上级目录的数据也会显示到当前子目录下来。

查看了一下开源项目 PhotoStream的代码,终于有了一个好的解决办法。为了演示,我们定义两个类:PhotoTask 和 PhotoGridView。PhotoTask 接收到目录路径后,获取指定目录下的子目录和图片文件。PhotoGridView主要是显示目录和图片。

public class PhotoTask extends AsyncTask<String, File, Void>{

@Override

protected Void doInBackground(String... path) {

File parent = new File(path[0]);

if (parent.isDirectory()) {

// 获取当前目录下的目录和文件

File[] files = parent.listFiles();

for (int j = 0; j < files.length; j++) {

if(isCancelled()) return null;// Task被取消了,马上退出循环

File file = files[j];

publishProgress(file );

}

}

}

@Override

public void onProgressUpdate(File... files) {

if(isCancelled()) return;// Task被取消了,不再继续执行后面的代码

.........

}

}

public class PhotoGridView extends GridView implements OnItemClickListener{

private PhotoTask task;// 保持对Task的引用

@Override

public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {

if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) {

task.cancel(true);//如果Task还在运行,则先取消它

}

......

// 启动新的任务

task = new PhotoTask();

task.execute(path);

}

}

经过上面的改造,终于不再出现上级目录的数据出现在子目录下面的情况了

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...