解决FileDownloader库中无全部开始下载任务接口的问题
Posted 独立开发者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决FileDownloader库中无全部开始下载任务接口的问题相关的知识,希望对你有一定的参考价值。
FileDownloader这个下载库提供了暂停全部下载任务的接口,没有提供全部开始下载的接口,下面我给说一下我项目中的解决方式。
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();
此文章主要就是给大家一个解决思路,并没有完美的解决问题,希望对你有所帮助。
以上是关于解决FileDownloader库中无全部开始下载任务接口的问题的主要内容,如果未能解决你的问题,请参考以下文章
Java多线程下载器FileDownloader(支持断点续传代理等功能)
windows 2003添加删除windows组件中无iis应用程序服务器项的解决
windows 2003添加删除windows组件中无iis应用程序服务器项的解决方法