自己动手写多任务下载框架

多任务多线程断点下载

自己动手写多任务下载框架
319人加入学习
(11人评价)
价格 ¥199.00
会员免费学 购买课程

LinkedBlockingDeque 队列来替代Executors.newFixedThreadPool(3),因为newFixedThreadPool只能停止整个线程池,而LinkedBlockingDeque可以控制单个线程。

[展开全文]

Handler传入DownloadTask来更新UI,感觉这样做不好,不如直接在Activity里写个Base基类里写封装回调方法,直接runOnUiThread.

[展开全文]

① 整体伪代码编写,细节调后

DataManager --> DownloadService -->

DownloadTask --> DownLoadThread

② 观察者模式 Observer,Watcher

 

[展开全文]

技术点调研:

1. 断点续传

2.观察者模式

3.线程池

4.队列

软件: HttpRequester(模拟http 请求)

 

[展开全文]

1.思考比代码更重要

2.开发流程:

需求分析设计(交互,用例)->系统架构(串联业务逻辑,定义规范)->测试->构建

3.

[展开全文]

waitngQueue.remove 中的bean重写了equal 和hashcode方法才能成功

 

Executors.newFixedThreadPoo(3)

Executors.execute(r) 不能手动控制取消。

so 用 Executors.newCachedThreadPool

[展开全文]

按照时间是否大于1s 判断是否调用notify来更新

[展开全文]

通过Log分析发现同一CurrentLength打印多次

原因为共用同一个entry

 

[展开全文]

为何使用队列来自己控制,下载队列?而不是直接用

newFixedThreadPools(3)

[展开全文]

observale的notify如何从子线程移到主线程中,来做显示---通过handler来实现

 

watcher中的ui更新,是通过list的移除更新notifyAdapter来实现

[展开全文]

pauseDownload 的话,为什么要使用hashmap的remove方法移除entry,后续的resume不需要再使用么?

间隔500毫秒才对用户的操作响用

resume从hashmap中获取的话是否会节省资源? 而不是重新addstart,(貌似没必要因为是断点下载,之前的下载进度是存下来的,直接续传的话也可以)

 

[展开全文]

验证业务流程

DownloadService 控制下载的add;resume;pause;cancel(子线程中处理耗时操作)

if cancelled ,delete related file;

[展开全文]

架构的第一步

先把架子搭起来,每一个类写出来,串联整个流程(todo;方法;接口,不要急于实现具体功能点比如下载具体的api调用)

DownloadEntity

DataChanger imp Observerable

  1. addObserver(DataWatcher w)
  2. removeObserver(DataWatcher w)

DataWatcher imp Observer

DownloadManager

  1. add  ---start service
  2. resume
  3. pause
  4. cancel
  5. addObserver();
  6. removeObserver();

DownloadService  下载服务,针对不同的动作做出响用,add、resume、pause、cancel等

DownloadTask  下载进程

 

 

 

[展开全文]

断点续传 Range(firefox httprequest工具)

观察者模式 Observer Observable

线程池 Executor(可以复用线程)

队列 Queue (排队?)

[展开全文]

思维习惯很重要?还没意识到。。

模仿其他app实现的话,参照多个app的该功能对比,(网络切换,后台,断网等);开发流程

分析设计(需求分析,功能交互流程图与产品经理沟通)

-->

架构

-->

测试

-->

构建

[展开全文]

what 对应api 

how 对应 implement 实现

why 对应 架构实现

观察者模式,是必须的

[展开全文]

断点续传Range 

观察者模式 Observer Observable

线程池 Executor

队列 Queue

[展开全文]

快速多次点击同一个按钮时 下载状态错乱

[展开全文]

断点续传 Range

观察者模式 ObServer Obserable

线程池 Executor

队列 Queue

 

 

[展开全文]