热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

本篇文章主要介绍了Android断点续传下载器JarvisDownloader的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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那么强大,但在下载文件方面,具备了很多的优点。

主要功能

  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

权限设置



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");


//刷新进度的频率(毫秒),最小值为100
downloader.refreshTime(1000);

//设置状态监听
//假如当前context为activity的话Jarvis已经自动帮你回调到主线程了,不需要调用activity.runOnUiThread
downloader.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() {
  @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>() {
  @Override
  public void onData(List 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

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


推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • 七大策略降低云上MySQL成本
    在全球经济放缓和通胀压力下,降低云环境中MySQL数据库的运行成本成为企业关注的重点。本文提供了一系列实用技巧,旨在帮助企业有效控制成本,同时保持高效运作。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • 在Android应用开发过程中,开发者经常遇到诸如CPU使用率过高、内存泄漏等问题。本文将介绍几种常用的命令及其应用场景,帮助开发者有效定位并解决问题。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 本文探讨了在SQL Server中处理几何类型列时遇到的INTERSECT操作限制,并提供了解决方案,包括通过转换数据类型和使用额外表结构的方法。 ... [详细]
  • 英特尔推出第三代至强可扩展处理器及傲腾持久内存,AI性能显著提升
    英特尔在数据创新峰会上发布了第三代至强可扩展处理器和第二代傲腾持久内存,全面增强AI能力和系统性能。 ... [详细]
author-avatar
moon2502863581
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有