Android程序更新-断点续传

来源:互联网 发布:mac ps色环插件 编辑:程序博客网 时间:2024/06/02 07:19

最近在升级以前既有的功能——把普通的App更新改成支持断点续传的更新。这个功能其实很简单,实现不难,不过我搞了两天。为什么呢?因为我收到不同的声音,一种说法是不需要服务端支持;另一种说法是必须要服务端支持,我就在这个问题上进行了一定的探索,终于确定最终答案。

我先来说说断点续传的原理把:

所谓的断点续传就是指:文件在传输过程式中被中断后,在重新传输时,可以从上次的断点处开始传输,这样就可节省时间,和其它资源。

                                                     

Android上做断点续传和单线程、多线程无关,多线程只是为了节省时间,提高效率。网上的多线程断点续传其实质原理还是利用了HTTP协议中的如下字段来和服务器端交互:

Range :用于客户端到服务器端的请求,可通过该字段指定下载文件的某一段大小,及其单位。

Accept-Ranges :用于服务器端到客户端的应答,客户端通过该字段可以判断服务器是否支持断点续传(注意RFC中注明了这一部分并不是必须的)。

Content-Ranges :用于服务器端到客户端的应答,与Accept-Ranges在同一个报文内,通过该字段指定了返回的文件资源的字节范围。

关于客户端怎么断点续传,只要做了请求字段的设置,用何种方式是无关重要的,使用单线程也好,多线程也罢。不过我首推使用框架,框架大多继承了多线程异步下载的功能。例如我使用的Afinal框架,该框架使用ajax方式,而且下载文件有进度回调,支持断点续传。

好,回归本文正题,我们下载文件的地址通常有多种,常见的有

1.http://172.27.35.12:8080/ServerForMultipleThreadDownloader/testapk.apk;

2.http://172.27.35.12:8080/downloadNews.html;

3.http://172.27.35.12:8080/download/test/downloadAppAction!downloadAndroidApp.action

........

暂时列这么多吧,第一条是最常见的,第二条其实质是和第三条一样,第二条会调用一个空的html,里面会调用第三条的action,除此之外还有servlet。php等其他我就暂时不讨论,没和php服务器交互过。

第一条的话是使用默认的http方式访问到服务器里的资源,默认支持断点续传。

而action和servlet的话都是strusts框架,它的做法是读取一个文件作为输出流输出,但是其传输方式默认不支持断点续传,如使用action或者servlet的话,需要手动处理才能支持断点。可以百度谷歌搜索关键字:strust文件 断点 下载

网上部分朋友说不需要服务器支持,那是他们使用了

http://172.27.35.12:8080/ServerForMultipleThreadDownloader/testapk.apk该方式下载,默认支持,所以不需要设置什么。

但是不能说不需要服务器,所以我这里要更正这部分网友的说法,断点续传功能需要客户端和服务器同时支持才可以

希望朋友们多多交流。



如有转载,请注明出处:http://blog.csdn.net/hjhrq1991


0 0
原创粉丝点击