热门标签 | 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

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


推荐阅读
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 精选30本C# ASP.NET SQL中文PDF电子书合集
    欢迎订阅我们的技术博客,获取更多关于C#、ASP.NET和SQL的最新资讯和资源。 ... [详细]
  • 通过与阿里云的合作,牛客网成功解决了跨国视频面试中的网络卡顿问题,为求职者和面试官提供了更加流畅的沟通体验。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 深入解析三大范式与JDBC集成
    本文详细探讨了数据库设计中的三大范式,并结合Java数据库连接(JDBC)技术,讲解如何在实际开发中应用这些概念。通过实例和图表,帮助读者更好地理解范式理论及其在数据操作中的重要性。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
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社区 版权所有