解决FileDownloader库中无全部开始下载任务接口的问题
2017-12-12 11:00
816 查看
FileDownloader这个下载库提供了暂停全部下载任务的接口,没有提供全部开始下载的接口,下面我给说一下我项目中的解决方式。
FileDownloader:https://github.com/lingochamp/FileDownloader
先看一下我的下载界面:
瞬间感觉有点标题党了。。。
首先,下载任务的列表展示所需的数据,我是自己单独存储的一个数据库,数据库中存储了FileDownloader返回的downloadId以及下载资源的信息;下载进度和下载状态等信息使用downloadId调用FileDownloader的接口查询。
FileDownloader的基本使用方式我就不在此介绍,我只说关于此博客的部分。
正在下载的资源列表是从自己存储的数据库查询出来的,当收到FileDownloader下载完成的通知后,会同步修改数据库中该资源的下载完成状态。
博客地址:http://blog.csdn.net/qxs965266509
点击正在下载的任务,根据下载Id暂停一个任务:
点击暂停的任务,开始或继续下载一个任务:
如果是在下载列表中调用start,建议传递fileDownloadListener,因为这个任务可能是新任务或重新下载的任务;如果当前任务不是新创建的下载任务,那么start返回的downloadId也需要更新到自己存储的数据库中,因为可能会有变化。
点击下方全部暂停,全部暂停下载任务:
全部开始下载任务:
可能你也想到下面的方法,就是遍历所有任务start,但是有一个问题,就是设置监听器的问题,不然列表上无法显示下载状态和进度。
1、获取RecycleView列表中第一个和最后一个显示条目的位置
2、遍历所有的任务,任务处理屏幕显示的,从Map中获取监听器,重新start,其他不显示的任务直接start即可。
DownloadManager.getInstance()
.updateDownload这个方法的内容就是上面开始任务的调用方式:
此文章主要就是给大家一个解决思路,并没有完美的解决问题,希望对你有所帮助。
有问题,直接@我(965266509)
FileDownloader:https://github.com/lingochamp/FileDownloader
先看一下我的下载界面:
瞬间感觉有点标题党了。。。
首先,下载任务的列表展示所需的数据,我是自己单独存储的一个数据库,数据库中存储了FileDownloader返回的downloadId以及下载资源的信息;下载进度和下载状态等信息使用downloadId调用FileDownloader的接口查询。
FileDownloader的基本使用方式我就不在此介绍,我只说关于此博客的部分。
正在下载的资源列表是从自己存储的数据库查询出来的,当收到FileDownloader下载完成的通知后,会同步修改数据库中该资源的下载完成状态。
博客地址:http://blog.csdn.net/qxs965266509
以下内容都是在下载列表进行阐述的:
在Adapter 中onBindViewHolder方法需要每次替换下载任务的监听器,同时我也把该监听器存储到全局的Map中,如下:FileDownloader.getImpl().replaceListener(downloadVideoInfoModel.getDownloadId(), fileDownloadListener); this.fileDownloadListenerMap.put(downloadVideoInfoModel.getUrl(), fileDownloadListener);
点击正在下载的任务,根据下载Id暂停一个任务:
FileDownloader.getImpl().pause(downloadVideoInfoModel.getDownloadId());
点击暂停的任务,开始或继续下载一个任务:
//url:下载链接 //path:自定义的下载路径(可不设置) //fileDownloadListener 下载监听 int downloadId = FileDownloader.getImpl() .create(url) .setPath(path) .setAutoRetryTimes(3)//可省略 .setCallbackProgressTimes(100)//可省略 .setListener(fileDownloadListener) .start();
如果是在下载列表中调用start,建议传递fileDownloadListener,因为这个任务可能是新任务或重新下载的任务;如果当前任务不是新创建的下载任务,那么start返回的downloadId也需要更新到自己存储的数据库中,因为可能会有变化。
点击下方全部暂停,全部暂停下载任务:
FileDownloader.getImpl().pauseAll();
全部开始下载任务:
可能你也想到下面的方法,就是遍历所有任务start,但是有一个问题,就是设置监听器的问题,不然列表上无法显示下载状态和进度。
1、获取RecycleView列表中第一个和最后一个显示条目的位置
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recycle_view.getLayoutManager(); int firstPosition = linearLayoutManager.findFirstVisibleItemPosition(); int lastPosition = linearLayoutManager.findLastVisibleItemPosition();
2、遍历所有的任务,任务处理屏幕显示的,从Map中获取监听器,重新start,其他不显示的任务直接start即可。
public void notify(int firstPosition, int lastPosition) { if (this.downloadVideoInfoModelList != null && this.downloadVideoInfoModelList.size() > 0) { DownloadVideoInfoModel downloadVideoInfoModel; for (int i = 0; i < this.downloadVideoInfoModelList.size(); i++) { downloadVideoInfoModel = this.downloadVideoInfoModelList.get(i); if (firstPosition <= i && i <= lastPosition) { FileDownloadListener fileDownloadListener = fileDownloadListenerMap.get(downloadVideoInfoModel.getUrl()); DownloadManager.getInstance() .updateDownload(downloadVideoInfoModel.getUrl(), downloadVideoInfoModel, fileDownloadListener); } else { DownloadManager.getInstance() .updateDownload(downloadVideoInfoModel.getUrl(), downloadVideoInfoModel, null); } } } }
DownloadManager.getInstance()
.updateDownload这个方法的内容就是上面开始任务的调用方式:
int downloadId = FileDownloader.getImpl() .create(url) .setPath(path) .setAutoRetryTimes(3)//可省略 .setCallbackProgressTimes(100)//可省略 .setListener(fileDownloadListener) .start();
此文章主要就是给大家一个解决思路,并没有完美的解决问题,希望对你有所帮助。
有问题,直接@我(965266509)
相关文章推荐
- DZX远程附件全部下载1KB问题解决方法
- Android 解决异步任务下载图片错位问题
- 附上解决迅雷9及迅雷极速版任何资源下载任务出错、内容违规问题
- 解决Android SDK Manager下载太慢问题
- 工行支付接口开发(Java版)体会和问题解决
- 以前从来没有写东西的习惯,从今天开始,把自己开发中遇到的问题及解决方法和心得记录下来!
- 解决NLTK包下载出错问题及NLP环境测试
- MySQL查询全部数据集结果不一致问题解决方案
- 解决Android sdk无法下载的问题
- 解决Android SDK Manager下载太慢问题
- gradle -- 使用国内阿里云镜像解决下载速度慢的问题
- 解决U盘中文件全部变成快捷方式的问题
- Chrome浏览器地址栏访问接口url,重复请求问题解决
- http文件服务器下载接口中文,特殊字符问题
- Rails开始遇到的一个端口占用问题的解决方法
- 解决Spring自带的定时任务执行两次的问题
- 解决在Cisco Packet Tracer中,接口up, 协议 down的问题
- 晚上开始就要解决这个查询乱码的问题