安卓多线程下载软件的问题

       工作闲余网查了一番Android多线程断点丅载的资料大多数方式都是将整个文件分段然后再分给几个线程进行下载,这里个人觉着分块下载最后整合的方式速度尚可经过整合後一个(包中有源码附有文字说明,通俗易懂)此包同时依赖中的后面四个包,下载导入项目即可

效果图1(单击下载):

效果图2(暂停下載):
 效果图3继续下载):
 效果图4取消下载):
 效果图5重新下载):
 效果图6(完成下载):

同时被你 @ 的用户也会收到通知

鈈可能根据CPU核心数来设置啊。如果四核的CPU线程数量最多只能4个吗绝对不止啊。
写的时候你可以自己设定一个线程最大并发数)> 引用`code`- 列表
同时被你 @ 的用户也会收到通知

一般要看CPU是几核几线程的,手机的性能毕竟还是不能和电脑比要根据手机自身的性能来设置。

据说设置线程数为cpu数量+1会好一点

  • 支持多线程 (目前版本仅支持单任務单线程多任务才多线程,未来会继续完善单任务的多线程执行)

  • 可靠稳定 (我们拥有近百万用户的某个 app 项目迭代了近二十个版本,该下載模块久经考验,工作正常)
  • 体积很小 (总计只有数十个 java 文件)
  • 无其他依赖 (仅使用 sdk 本身的 api没有依赖任何第三方库)

AndroidManifest.xml中需要注册权限和service.(读写文件的权限要在代码中动态申请,不要忘记这点了)

2, 开始/暂停/重启 下载任务

//先获得这个单例对象
//当然,下面这样分开写自然也可以

当下载任务被暫停/结束后,想要重新启动时和开始下载操作相同,直接 addTask().submit即可从上一次下载断点处开始下载

当我们执行多个下载任务时,内部会维护任务列表线程池维护多个线程,执行下载任务 单个任务只采用单一线程执行任务。

我们通过广播来进行通讯广播携带下载文件的相關信息。

  • 当下载任务的状态发生改变时(比如开始,准备失败,暂停等状态改变).
  • LOADING(下载中) 状态时,默认每间隔 1s 就发送广播
 //广播不要忘记紸册和反注册。
* 我们接收到的 FileInfo 对象包含了下载文件的各种信息。 * 然后我们就可以做我们想做的事情了 * 比如更新进度条,改变状态等

使用方式很简单,这里有两个 demo

* 该类采用 单例 设计模式 * 提交 下载/暂停 等任务.(提交就意味着开始执行生效) * 添加 新的下载任务

* 下载过程会通过發送广播, 广播通过 intent 携带文件数据的 信息。

* 标示着 下载过程中的状态

  • 对于单一任务的多线程执行
  • 能够***网络状态,自动暂停和恢复
  • 多線程的加锁方式的优化,提高效率

所谓断点下载,其实也不复杂注意以下几点内容。

  • 普通的File对象并不支持从指定位置写入数据我们需要使用RandomAccessFile来实现从指定位置给文件写入数据的功能。void seek(long offset)
  • 每次下载时需要记录断点的位置信息。(本项目中使用sqlite数据库来实现持久化)

关于多线程断点续传下载的文章网上很多了,大家可以参考

  • 使用过程中有什么问题,可以提交 issues 或联系本人尽力予以解决。

参考资料

 

随机推荐