android多线程下载模块
16lz
2021-01-26
<strong>使用场景</strong>
apk应用内更新,其他中小文件的下载,断点续传下载等,先来看看效果图:
<br/>
<strong>简单方便的调用接口</strong>
调用者只要设置好下载路径、文件后缀,丢一个url即可开始下载,并且可以根据需要监听进度,例如:
如果你只关心使用,拿来就用,文章到这里不用往下看了,直接到我的<a href="https://github.com/liuguangli/AndroidFileDownloader">Github仓库下载源码</a>和例子吧。当然我很希望读者一起来理解下简单的实现原理。
<strong>设计与实现</strong>
多线程下载的实现,生产者消费者模式,对于设计实现层面的东西个人更喜欢用图说明,序列图如下:
<strong>FileDownloader:</strong>直接面向调用者,使用者只care文件的url,下载存储路径,下载进度状态,我们致力将对外接口封装的尽量简单方便,所以仅仅提供一个addFile(),传入url,文件路径,回调监听器。
<strong>DownloaderListener:</strong>下载进度或状态监听接口,调用者实现回调方法处理进度状态。
CreatorThread:生产者线程,这个线程负责通过url获取文件大小,再将文件分片组装成下载任务段。
TaskList: 任务队列,生产者线程可以往里面增加任务段,消费者线程可以从里面取出一段下载任务,这个过程是同步的。
DownloadThread:消费者线程,负责消费任务队列里面的任务段。
apk应用内更新,其他中小文件的下载,断点续传下载等,先来看看效果图:
<br/>
<strong>简单方便的调用接口</strong>
调用者只要设置好下载路径、文件后缀,丢一个url即可开始下载,并且可以根据需要监听进度,例如:
FileDownloader mDownloader = FileDownloader.getInstance(getApplication());mDownloader.setExtend(".apk");mDownloader.setFilePath(Environment.getExternalStorageDirectory() + "/apk/");mDownloader.addFile("http://zhuzher.vanke.com/uip/zhuzher.apk");mDownloader.setDownloadObserver(new DownloadObserver() { @Override public void onUpdate(String apkUrl, String file, int completeSize, int apkFileSize) { //do your thing } @Override public void onComplete(String file) { //do your thing } @Override public void onError(String apkUrl, int type, int state) { //do your thing } });
如果你只关心使用,拿来就用,文章到这里不用往下看了,直接到我的<a href="https://github.com/liuguangli/AndroidFileDownloader">Github仓库下载源码</a>和例子吧。当然我很希望读者一起来理解下简单的实现原理。
<strong>设计与实现</strong>
多线程下载的实现,生产者消费者模式,对于设计实现层面的东西个人更喜欢用图说明,序列图如下:
<strong>FileDownloader:</strong>直接面向调用者,使用者只care文件的url,下载存储路径,下载进度状态,我们致力将对外接口封装的尽量简单方便,所以仅仅提供一个addFile(),传入url,文件路径,回调监听器。
<strong>DownloaderListener:</strong>下载进度或状态监听接口,调用者实现回调方法处理进度状态。
CreatorThread:生产者线程,这个线程负责通过url获取文件大小,再将文件分片组装成下载任务段。
TaskList: 任务队列,生产者线程可以往里面增加任务段,消费者线程可以从里面取出一段下载任务,这个过程是同步的。
DownloadThread:消费者线程,负责消费任务队列里面的任务段。
GitHub账号:<a href="https://github.com/liuguangli/">https://github.com/liuguangli</a>,欢迎fork,贡献你的idea,一起做好每一件小事。
个人博客:www.liuguangli.win
更多相关文章
- Android初级教程理论知识(第八章网络编程二)
- Android(安卓)HDecoration项目so库导出和调用
- [毕业设计-基于android的手机网盘的设计与实现] java中文件的soc
- Android(安卓)自己实现 NavigationView
- Android经常使用UI组件 - TextView
- Tinker热修复简单接入
- android 下载保存图片
- Android(安卓)XMl文件存储及其解析
- 如何在xml中直接添加view点击监听(参考rayleung博客)