多线程断点续传下载文件类设计

  次阅读 来源:互联网(转载协议) 2016-01-13 22:06 我要评论(0)

对于Android平台,很多网友可能考虑开发一个软件商店,对于Android平台上如何实现断点续传操作呢? 这里Android123给大家一些思路和原理的介绍,同时在Android手机上要考虑的一些事情。

1. 流量控制,获取运营商的接入方式,比如说使用移动网络接入,尽可能的提示用户切换WiFi或提示,限制下载的流量以节省话费。

2. 屏幕锁控制,屏幕锁屏后导致应用会被挂起,当然Android提供了PowerManager.WakeLock来控制。

3. 对于断点续传,这要追溯到Http 1.1的特性了,主要是获取文件大小,如果这个无法读取的话,那么就无法断点续传了只能使用chunked模式了,当然获取远程服务器上文件的大小可以通过Http的响应头查找Content-Length。

4. 获取上次文件的更改时间,对于断点续传来说比较有风险的就是 继续下载的文件和早期下载的在server上有变动,这将会导致续传时下载的文件版本和原始的不同,一般有两种解决方法,早期我们配置服务器时通过Last-Modified这个http header获取文件上次修改时间,不过本次Android开发网推荐使用更为强大的ETag,ETag一般用于解决同一个URL处理不同返回相应,比如Session认证,多国语言,以及部分黑帽的SEO中。具体的实现大家可以参考RFC文档。

5. 考虑服务器的3xx的返回,对于专业的下载文件服务器会考虑到负载平衡问题,这就涉及到重定向问题,处理重定向使用Android的Apache库处理比较好。

6. 至于多线程,这里CWJ提示大家可能存在独立的线程下载一个文件,和多个线程分块下载单个文件之分,其中后者需要考虑上次下载数据是否存在问题,同时如果服务器不支持文件大小获取,则无法通过分段下载数据,因为不知道如何分段,所以在chunked模式中,只能使用一个线程下载一个文件,而不是多个线程下载一个文件。

7. 下载后的数据效验,可以考虑CRC等方式,当然对于一般的传输只要逻辑不出现问题,基本上不会有偏差。

8. 考虑DRM问题,这个问题在国内用的比较少,而国外的受数字保护的音乐和视频,需要额外的获取证书等。

9. 重试次数,对于一个文件可能在本次网络传输中受到问题,尤其是移动网络,所以可以设置一定的重试次数,让任务单独的走下去。

10. 线程开发方式,这里如果你的Java基础比较好,推荐直接使用Java并发库API比较好,如果过去只做过Java开发使用Thread即可,如果Java技术不过关可以Android封装的AsyncTask。

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

人工智能实验室
相关文章相关文章
  • 马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

    马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

  • 汤晓鸥:人工智能的中国式文艺复兴

    汤晓鸥:人工智能的中国式文艺复兴

  • 区块链最近太火,但A股多家公司明确表态不考虑涉足

    区块链最近太火,但A股多家公司明确表态不考虑涉足

  • 全球陷入"区块链狂热"潮,大规模应用还需等待

    全球陷入"区块链狂热"潮,大规模应用还需等待

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

算法 任何一个入门的软件开发人员都会听到这句话:算法是软件的灵魂!近年来大火的机器学习即是在算法在人工智能上的集中体现。今日头条通...

据《日本经济新闻》报道,日本东京大学教授稻叶雅幸等人开发出再现日本人骨骼肌肉构造的机器人。机器人各部位的肌肉和骨骼长度与日本人的平...

以奥黛丽-赫本为原型打造的人形机器人索菲娅首次拜访了印度。索菲娅是世界上首位获得公民身份的机器人,她在12月30日出现在了印度理工学院...

在查获现场,代售点电脑旁的一台机器人通过敲击电脑键盘抢票。 广州日报惠州讯 (全媒体记者秦仲阳 通讯员张中铃摄影报道)2018年春运售票已...