首页 > 系统 > Android > 正文

Android断点续传下载器JarvisDownloader的示例

2019-10-22 18:12:14
字体:
来源:转载
供稿:网友

JarvisDownloader

熟悉漫威电影的人都知道Jarvis,他是钢铁侠的智能管家,帮助钢铁侠制造装甲、分析大量数据、协助建模等各种智能工作,可惜在复联2中,Jarvis与灵魂宝石共同结合成Vision,钢铁侠失去了这位如亲人一般的智能AI,后来Tony用F.R.I.D.A.Y代替了Jarvis的工作,但从钢铁侠与Friday的互动来看,他只把Friday当做一般的AI,并没有投入如对待Jarvis的感情。

最近复联3上映,中国没有同步上映,真的太可惜了,五一本来还想过去香港看,但想到到时会人生人海还是算了,所以假期闲余时间就撸了个 JarvisDownloader ,之所以以Jarvis命名,也是因为我太喜欢Jarvis这个AI了,它属于人工智能的顶端啊! JarvisDownloader 虽然没有Jarvis那么强大,但在下载文件方面,具备了很多的优点。

Android,断点续传,JarvisDownloader

主要功能

  1. 支持断点续传下载
  2. 支持自定义文件夹路径、文件名。
  3. 支持自定义SQLiteOpenHelper,用于保存下载进度等
  4. 下载进度回调时自动切换到UI线程,方便更新UI。
  5. 自动与activity绑定生命周期,无需手动释放
  6. activity不可见时,不会更新UI,可见时会自动恢复状态
  7. 支持查询下载历史列表

使用JarvisDownloader

依赖远程库

gradle

repositories {    maven{    url "https://jitpack.io"  }}dependencies {  api 'com.github.yuwenque:JarvisDownloader:0.2.0'}

初始化数据库

Jarvis.init(new DefaultDownloadHistoryDBHelper(applicationContext));

你也可以自定义一个继承于AbsDownloadHistoryDBHelper的管理类,用于保存下载进度等操作,详细操作请参考 DefaultDownloadHistoryDBHelper

权限设置

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Jarvis.Downloader构建下载任务

请在activity或service中调用

//构成下载器Jarvis.Downloader downloader = Jarvis.with(this).withUrl("http://pic1.win4000.com/wallpaper/2017-10-11/59dde2bca944f.jpg");//是否允许ui不可见时继续下载downloader.allowBackgroundDownload(true);//多线程下载数量downloader.threadCount(3);//设置下载目录,非必须,默认目录为 Environment.getExternalStorageDirectory()+File.separator+"Jarvis"downloader.filePath(Environment.getExternalStorageDirectory() + File.separator + "Jarvis");//设置文件名,非必须,但建议手动设置,默认为服务器文件的名字downloader.fileName("test.jpg");//刷新进度的频率(毫秒),最小值为100downloader.refreshTime(1000);//设置状态监听//假如当前context为activity的话Jarvis已经自动帮你回调到主线程了,不需要调用activity.runOnUiThreaddownloader.setDownloadListener(new DownloadListener() {  /**   * 文件下载完毕回调   * @param file   */  @Override  public void onSuccess(File file) {  }  /**   * 进度回调   * @param downloadedSize 当前下载的文件大小   * @param progress 当前进度 0-1.0   */  @Override  public void onProgress(long downloadedSize, float progress) {  }  /**   * 开始下载时   */  @Override  public void onStart() {  }  /**   * 下载暂停时   */  @Override  public void onPause() {  }  /**   * 下载失败时   */  @Override  public void onFail() {  }  /**   * 被删除时   * @param b 删除成功标志位   */  @Override  public void onDelete(boolean b) {  }});//开始下载downloader.download();//手动暂停downloader.pause();//恢复下载downloader.recovery();//手动删除本地记录,但不删除文件,文件下载过程中不允许删除downloader.delete();//删除下载记录以及文件,文件下载过程中不允许删除downloader.deleteCacheFile();//获取当前的下载状态downloader.getDownloadState();//同步获取上次下载的进度,由于是查询数据库的操作,所以建议新开线程来获取downloader.getDownloadedProgress();//异步获取下载进度downloader.getDownloadedProgress(new DataCallBack<Float>() {  @Override  public void onData(Float progress) {  }});

上述代码也可以简化成以下形式

Jarvis.with(this)    .withUrl("http://pic1.win4000.com/wallpaper/2017-10-11/59dde2bca944f.jpg")    .allowBackgroundDownload(true)    .threadCount(3)    .filePath(Environment.getExternalStorageDirectory() + File.separator + "Jarvis")    .fileName("test.jpg")    .refreshTime(1000)    .setDownloadListener(listener).download();

Jarvis管理下载任务

//异步获取下载历史记录,下载进度请自己计算Jarvis.getInstance().getDownloadedList(new DataCallBack<List<LocalFileRecordBean>>() {  @Override  public void onData(List<LocalFileRecordBean> localFileRecordBeans) {    LocalFileRecordBean fileRecordBean= localFileRecordBeans.get(0);    //下载进度    float progress = fileRecordBean.getDownloadedLength()*1.0f/fileRecordBean.getFileTotalLength();  }});//停止所有下载任务Jarvis.getInstance().pauseAllDownloader();//开始所有下载任务Jarvis.getInstance().startAllDownload();//删除所有下载任务及文件Jarvis.getInstance().forceDeleteAll();//设置下载的线程池长度,如果当前有10个下载任务,//每个任务开启3个线程进行断点续传下载,那么此时只设置20个的话,将有部分下载任务需等待其他线程执行完任务才能开始Jarvis.getInstance().initThreadPoolLength(20);

源码阅读请跳转到 https://github.com/yuwenque/JarvisDownloader

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表