求教批量下载文件的思路
我在用BlackBerry JDE(java1.3)开发应用,遇到批量下载的问题,下边是我使用的方法,请大神们给些建议~
我做的是知乎日报客户端,首先用一个线程获取json数据,在ui里添加列表显示所有项目内容,这一步没有问题
然后是下载每一个列表里的缩略图,一开始我只用了一个http connection循环下载,模拟器上没问题,因为电脑速度快,但是在设备上调试,会频繁抛出Stream Closed异常(但是所有缩略图都正确下载并显示了),我猜测的原因是,当第一个文件下载结束时调用http connection的close方法关闭连接,但是关闭需要一定的时间,与此同时第二个文件的下载开始了,因为是同一个连接,所以一边建立连接一边关闭连接就异常了,这是我的猜测。。。。。
接着我换了另一个方法,使用一个新线程,循环下载每一个文件,但是每一个下载都使用了一个新的http connection,也就是说,前一个连接关闭需要多久我不管它,反正有新的连接去下载后边的文件,这样做似乎解决了问题了
但是效率问题出现了,开始测试知乎api的时候只用主线程获取json数据并下载缩略图,虽然阻塞了,但是只要等一下下所有图片文字就都显示出来了(缩略图每个3k左右,一次最多10几个),用了现在这个方法,显示图片的时候就像是慢镜头,眼看着隔几秒显示出来一张,我感觉这个方法应该还是有问题的
再然后是下边的问题,因为日报数据是按日获取的,比如我刚刚打开了今天的内容,还没等缩略图下载完毕(因为上边的方法下载图片很慢很慢),就想看前一天的内容了,于是乎重新获取json数据,再一次下载所有缩略图,重复几次这个动作,就会抛出TooManyThread异常n次,我忘了黑莓设备允许同时运行的线程数是几十个还是100多个,但是理论上我重复一次上边的操作应该只会新增加一个线程才对,不可能抛出too many异常啊?难道每个下载连接也算一个线程了?
啰嗦了一堆只是为了描述清楚我的问题,总结一下我的问题其实只有两个,对于批量下载文件有没有什么更高效的方法,以及在第一次批量下载没结束的情况下开始第二次批量下载,怎么能有效的中断第一批次?鉴于这个app的特性,第一批次的数据和图片在第二批次开启时就可以作废了,所以不用考虑数据完整性问题
请大神们一定帮帮忙啊,谢谢啦!!!~