file-downloader框架深入使用
阅读本文的前提你已经了解该框架,在进行深入开发需要改造框架,如不了解可以先了解下面文字介绍
FileDownloader([GitHub框架地址](https://github.com/wlfcolin/file-downloader))是 博主wlfcolin 开源的一个安卓Http文件下载框架,是根据自己的经验总结的一套非常轻量级的安卓通用Http文件下载管理器。我的目标是让文件下载越简单越好,尽可能以最简洁明了的方式完成复杂需求。亦可以查看github上的最新中文描述
一、特点
多任务并行下载、自动断点续传、失败自动重试机制、支持大文件(超过2G)下载、强大方便的异常处理和异常恢复机制、轻松管理下载文件的生命周期(下载文件的增删改查)等。
二、非常适合的使用场景
1、需要多页面多方位同步下载进度和下载状态(比如商店APP,A页面开启点击下载,B页面和C页面也可以看到下载进度和暂停这个下载,而D页面 可以删除这个下载,无论哪个页面有操作,其它页面都会收到响应的回调进行更新,并且还可能还需要常驻一个service来把下载情况同步发送到通知栏的)
2、需要断点续传节约流量(比如做批量应用更新APP、单个应用自己更新下载新版本、做影视需要批量缓存视频的APP,做MP3歌曲下载APP)
3、专门做下载的(比如迅雷之类的APP,需要下载任何服务器上的东西,并且兼顾下载效率和开发效率的)具体使用方法详见作者博文地址:http://www.cnblogs.com/wlfcolin/p/5001363.html
下面是我在使用该开源框架遇到的一些问题:
1、将要下载资源页面和下载资源页面共同使用问题(将要下载的页面和下载页面整合一个页面)。
2、批量下载问题,下载大批量文件问题,这一问题是因为数据数据增加,查询数据量变多引起的。
第一个问题还好解决只要将下载数据数组和将要下载资源数组分开即可,有一点要注意,
在使用如下代码一定要预先将数组数据设置好,因为如果不预先设置好 ,这个地方数据在进行执行 notifyDataSetChanged();方法将会被多次调用这样就很浪费资源,特别是将该代码放在Listview中getview方法中执行或者Recycleview中的onBindViewHolder方法中执行,这样是最不好的,最好放在构造方法或者别的初始化方法中执行,这样就很好可以避免这个问题,当然有小伙伴有疑问那我下载状态怎么刷新,别急当然有方法,你可以使用service通过广播刷新更新界面,这样就可以完美使用了。
接下来解决第二个问题,大批量文件下载,当一次性文件下载总数大于50这时候肯定会出问题,因为你一次性把所有数据都写入数据库况且你还要执行下载任务,所以只能将文件数据进行划分一次下载10个或者20个,你以为这样就可以了,其实还不可以,当你下载到200以上的文件你会发现又变卡顿了,这个问题其实是困扰了我3天,因为数据库内容变多这是无法避免的,期初我也没想到,直到后来我突然想到我可以把下载好的文件的数据库内容清除这样不就可以,但是你要另外用数据库做好标记,以便于得到下载完成的文件信息,这样为什么就不卡顿,有人很奇怪,不是多此一举,数据库又要重写内容还是辣么多,其实不然这时候下载完成文件信息你只存储一条url链接,这样数据库信息是不是少很多,没有下载进度,文件大小那些信息了,当然你要使用这些信息你可以让你的后端把文件信息给你,这就可以了,下图是具体使用逻辑:
最后欢迎大家一起踩坑,还要提醒大家使用框架固然快,但是根据自己的需求更改框架是必要的有时候甚至换框架,还要感谢开源框架作者,如有疑问欢迎留言。