为了账号安全,请及时绑定邮箱和手机立即绑定

求android或java大神解答下这个小bug

求android或java大神解答下这个小bug

夏Jue 2016-12-23 23:05:18
是这样的,我的android程序中打开了一个activity,里面进去后就是用File对象 file.list()方法读取指定目录中的所有文件然后显示到GridView中,有一个小bug,比如我的目录下有大量文件,file.list()方法执行速度就会很慢,一直到能显示到GridView中需要一段时间,如果在还未获取完成时退出了该activity,但是它的获取操作可能还在继续,获取完后才会被回收?如果在该次操作(file.list获取文件)还没有完成并回收前再次进入该activity,则又会重新开始一次操作(file.list获取文件),导致更慢,所以我如何能在该activity执行onDestroy的时候终止掉这里面的操作?(file.list获取文件)求大侠解答,或提供思路,由衷感谢!如果您没接触过android,但是知道java的话,我就简单阐述下,能不能终止掉File对象中的.list方法,
查看完整描述

3 回答

已采纳
?
alionSSS

TA贡献57条经验 获得超82个赞

拿一个子线程去执行file.list(),然后onDestroy的时候打断子线程,这样可以吗?

查看完整回答
1 反对 回复 2016-12-24
  • 夏Jue
    夏Jue
    谢谢你的回答,根据你的思路基本解决了这个问题.这几天写太多代码写晕了把它想复杂了,我把AsyncTask终止就可以了
  • alionSSS
    alionSSS
    多休息休息!解决了就好!
?
谦谦佳人

TA贡献29条经验 获得超7个赞

线程在未完成任务时,你是无法去强行让它停止的。

对于java封装好的api,你必须得继承File类  然后重写listFiles() 方法,如图

//img1.sycdn.imooc.com//585e291e0001c26809580332.jpg

直接将这个代码块拷过来就行,然后在其中的for循环第一行就加上activity的销毁判断

if(activity == null || activity.isFinishing()){

    return null;

}


查看完整回答
1 反对 回复 2016-12-24
  • 夏Jue
    夏Jue
    谢谢你的回答!这个我倒是从来没想到过,受教了.
  • 夏Jue
    夏Jue
    你上面的listFiles方法我查看了下,这个方法一开始就调用了list()方法,而list方法是调用了 private static native String[] listImpl(String path);,表示是一个外部方法,没办法看源码,应该也无法用java实现,所以也无法在里面的循环中添加条件控制,所以很遗憾也是不行的,不过非常感谢您提供的这个思路,相信对我以后的开发有很大帮助的.
  • 谦谦佳人
    谦谦佳人
    好吧,我也没试过,只是这样的方式比直接停止线程要靠谱一些。
点击展开后面1
?
一条小咸鱼

TA贡献457条经验 获得超255个赞

再开一个线程?

查看完整回答
反对 回复 2016-12-24
  • 夏Jue
    夏Jue
    原本就是异步执行了,根据楼上的提醒把异步终止就可以了,谢谢你们的回答
  • 3 回答
  • 0 关注
  • 1712 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信