热点推荐

查看: 7927|回复: 24

[造轮子系列]自己动手写多任务多线程断点下载框架

[复制链接]

1418

主题

1532

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
39191
发表于 2018-4-15 00:01:18 | 显示全部楼层 |阅读模式

[造轮子系列]自己动手写多任务多线程断点下载框架


多任务下载框架,是一个封装了下载功能的工具,它支持下载队列,对外提供下载进度更新,暂停||恢复||取消下载等功能。该框架适用于一切需要多任务下载的地方。例如app市场的app下载,视频app的视频下载,网易云阅读的离线下载等等。7 I. r4 i3 \3 L% F" r7 p' Q) X

如何将不同的下载场景抽取出一个普适的工具,这是Stay要着重花时间来讲的,毕竟每个App的下载需求都不一样,如何解耦,如何扩展,这些都是使用开源框架无法体会的。通过从0到1的架构过程,希望能让大家学会举一反三,以后再也不用去发愁有了bug不会改,有了新需求不会扩展。
我们会在多任务下载中会碰到很多坑,我们先来预热下。
" d$ r6 b& z0 d" R: ^) _) m4 ~
比如说:* _! a1 C4 x6 f# _0 a4 T- h/ Q3 f
1. 下载的进度与状态如何notify给所有的activity,单一的callback已经不能满足这样的需求了
2. 由于使用多个线程去下载同一个文件,涉及到的进度更新等这些并发操作如何处理,并不是简单的加上synchronized就搞定了的
3. 当应用被强杀后,我们的下载数据应该如何处理,是否能再恢复断点下载?) U% u( ?* J2 p4 I1 s
4. 下载之前的预处理:是否支持断点续传,文件长度是否能获取,它们都对应着不同的下载策略- o% k  m! e. g4 Z$ {) {! b* o
8 i: a$ ^2 d+ U8 [
这些坑,只有掉进去过才知道如何爬出来,如果只想着去用开源框架,再掉坑里那就麻烦了,一是可能不会改,二是本身框架的限制,改了会破坏耦合。

相信我,没有任何一个开源框架能满足你所有的需求,总是要改的,Stay的也不例外,但我们讲的是框架是如何从无到有写出来的,而不是拿一个完整的框架来分析。一旦你知道如何写,你就明白耦合是怎么一回事,在哪些节点可以再加哪些扩展与优化。

框架永远都不可能变得完美,它是基于当前项目环境下的最优产物,所以Stay不可能教会你所有的功能知识点,但是会把这种解决问题的能力传递给你,不思考不实践是学不会的,但只要你掌握了这种能力,不管是本框架还是其他任何需求,你都能轻松应对。; p$ d8 n; b" J) W2 Q1 A: S

另外,在课程中也穿插了真实的开发流程:需求分析-产品设计-架构-测试-实现,Stay希望通过本课程能培养大家正确的开发方式,让自己更高效。- S, `- P1 j$ }
! n# X8 K4 J5 N0 O' V; ^+ H
既然是框架课程,已经脱离了单纯的API调用,其高度抽象与伸缩性不是那么容易就能理解,希望同学们能耐心的学习,花时间去实践,磨刀不误砍柴工,只要有所领悟,它给你带来的不仅仅高效开发这么简单。
) y6 v3 }8 Z# F9 @
课程目录:
; T' R5 r6 [- i' n2 {  [
第1章课程重制V3版(更新完毕)
第2章大不一样(AS+GIT+MVC+互动)" o5 a7 G. g+ o
1你要的多任务下载是这样的吗(免费课时)可试听整节00:13:371 H2 u0 F# p5 R2 R
2在写代码之前,我们该做些什么(免费课时)可试听整节00:08:334 D6 Q! C. j' Y, p
第3章基础框架搭建9 ?2 a" t' p' _; K: Q
1需求分析,技术点调研(免费课时)可试听整节00:13:595 q& C9 n3 j5 h9 Q
2伪代码+TODO串联一切(免费课时)可试听整节00:15:23
3完善并验证完整业务流程(免费课时)可试听整节00:15:131 r# R% m* u5 L7 B/ J( t  C7 a
第4章完善主结构% H+ ~, U: G) w
1单个任务的下载|暂停|取消|恢复00:12:14
2多任务的下载|暂停|取消|恢复00:14:48
3限制同时下载的最大任务数00:16:05
4小结以及实现任务全部暂停00:15:00
5实现全部任务恢复下载以及优化00:14:422 o% H  n$ I1 d! _# u* a) T4 Q
6添加数据库逻辑,防止App被强杀后的数据丢失00:16:51
第5章下载核心实现6 {3 E/ ~. c' B, N' V' h0 l
1预处理:判断是否支持断点续传,以及文件大小00:11:19
2多线程单文件下载实现00:14:52
3暂停|恢复逻辑整理00:10:26- z/ w. q1 t' Y7 ~7 H! B. K
4取消下载并优化00:14:49
5下载流程梳理(免费课时)可试听整节00:10:21
6当某条线程下载异常时的处理00:12:33
7不支持断点续传时使用单线程下载00:12:41
8无法预取文件长度时的下载操作00:10:41" n& a/ U$ v4 u) @$ n7 d+ D; T
第6章多线程编程的那些坑
1Handler与线程的那些坑00:12:29, @+ k# T) s) N; N
2多种方式解决多线程并发造成的数据脏读(上)00:13:01/ |0 G- t# R1 p& c
3多种方式解决多线程并发造成的数据脏读(下)00:16:18; d% [1 X3 ^* u8 t4 x# U3 x& p
第7章优化|测试
1将hard code参数改为可配置的00:14:036 d0 _9 {( G' _1 h0 }& \
2多任务下载简单测试(附bug fix)00:07:10! z* _1 s; w. Y' k5 ~8 y; B
3模拟应用市场下载流程并优化00:14:47
4剩余细节的需求分析和解决方案00:12:16  c1 D; w6 _- d, l, t. F2 y* P3 h
第8章暂时告一段落
1小结:写代码之前必看00:09:22

下载地址回复可见:
游客,如果您要查看本帖隐藏内容请回复

回复

使用道具 举报

0

主题

693

帖子

1745

积分

永久VIP会员

Rank: 3Rank: 3

积分
1745
发表于 2018-4-15 07:28:07 | 显示全部楼层
谢谢,希望有帮助!
回复

使用道具 举报

1

主题

235

帖子

875

积分

永久VIP会员

Rank: 3Rank: 3

积分
875
发表于 2018-4-15 09:40:56 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

2

主题

197

帖子

694

积分

永久VIP会员

Rank: 3Rank: 3

积分
694
发表于 2018-4-15 16:55:28 | 显示全部楼层
学习 学习 学习
回复

使用道具 举报

0

主题

221

帖子

613

积分

永久VIP会员

Rank: 3Rank: 3

积分
613
发表于 2018-4-15 18:09:40 | 显示全部楼层
多任务多线程
回复

使用道具 举报

4

主题

103

帖子

389

积分

Lv1码农小白

Rank: 1

积分
389
发表于 2018-4-15 20:25:04 | 显示全部楼层
666,感谢分享
回复

使用道具 举报

0

主题

409

帖子

1325

积分

永久VIP会员

Rank: 3Rank: 3

积分
1325
发表于 2018-4-15 23:43:32 | 显示全部楼层
我来看看啊
回复

使用道具 举报

1

主题

541

帖子

1403

积分

Lv1码农小白

Rank: 1

积分
1403
发表于 2018-4-16 08:10:35 | 显示全部楼层
必须学习下
回复

使用道具 举报

0

主题

2

帖子

7

积分

Lv1码农小白

Rank: 1

积分
7
发表于 2018-4-16 10:03:07 | 显示全部楼层
好的哇打我定位定位定位
回复

使用道具 举报

0

主题

2

帖子

7

积分

Lv1码农小白

Rank: 1

积分
7
发表于 2018-4-16 10:03:28 | 显示全部楼层
好的哇打我定位定位定位
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表