项目里需要用到下载,一开始没觉得有什么难的,后来真正写的时候才发现这里的逻辑还是有一点绕的,在小伙伴的提醒下我才真正把逻辑理清楚!写代码前的逻辑要清楚,这样写的时候才知道要点,如果不知道从何下手,那么最快最简便的方法就是直接模仿同类产品,那句话怎么说来着,好的艺术家抄袭,伟大的艺术家剽窃!(哈哈,其实这句话的本意是让你从优秀的产品里找到设计的艺术)
有了这个逻辑之后再去实现就好写多了,接下来就是具体的实现了,具体的代码我就不贴了,毕竟这是公司的商业项目,其中实现断点续传的部分参考自http://stackoverflow.com/questions/6237079/resume-http-file-download-in-java
//这句话就表示下载是具体从哪一个比特开始
connection.setRequestProperty("Range", "bytes=" + downloaded + "-");
//当pause为true时直接结束下载,换句话说根本不存在真正的暂停,点了暂停之后就结束下载
//并记录具体下载了多少bytes,当再次下载时读取已下载的bytes放在connection中,实现了断点续传
while ((bufRead = is.read(bytes)) != -1 && !pause) {
curlength += bufRead;
fos.write(bytes, 0, bufRead);
//避免更新太快造成的卡顿,这里每5%更新一次,原先我是新开一个线程专门来发数据给UI更新,结果各种问题,后来小伙伴refactor时改成这个if语句
//确实,简单有效的方法最好了!
if (curlength * 100 / totalLength - percentProgress > 5) {
percentProgress = curlength * 100 / totalLength;
sendDownloadProgress(videoDownload);
}
}
最后写句话给自己:功能实现之后记得review并refactor自己的code,这不仅是在整理自己的思路也是在培养自己良好的编程习惯!向1W行代码前进!