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

课程介绍

多任务下载框架,是一个封装了下载功能的工具,它支持下载队列,对外提供下载进度更新,暂停||恢复||取消下载等功能。该框架适用于一切需要多任务下载的地方。例如app市场的app下载,视频app的视频下载,网易云阅读的离线下载等等。

如何将不同的下载场景抽取出一个普适的工具,这是Stay要着重花时间来讲的,毕竟每个App的下载需求都不一样,如何解耦,如何扩展,这些都是使用开源框架无法体会的。通过从0到1的架构过程,希望能让大家学会举一反三,以后再也不用去发愁有了bug不会改,有了新需求不会扩展。

我们会在多任务下载中会碰到很多坑,我们先来预热下。
比如说:

  • 下载的进度与状态如何notify给所有的activity,单一的callback已经不能满足这样的需求了
  • 由于使用多个线程去下载同一个文件,涉及到的进度更新等这些并发操作如何处理,并不是简单的加上synchronized就搞定了的
  • 当应用被强杀后,我们的下载数据应该如何处理,是否能再恢复断点下载?
  • 下载之前的预处理:是否支持断点续传,文件长度是否能获取,它们都对应着不同的下载策略

这些坑,只有掉进去过才知道如何爬出来,如果只想着去用开源框架,再掉坑里那就麻烦了,一是可能不会改,二是本身框架的限制,改了会破坏耦合。

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

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

另外,在课程中也穿插了真实的开发流程:需求分析-产品设计-架构-测试-实现,Stay希望通过本课程能培养大家正确的开发方式,让自己更高效。

既然是框架课程,已经脱离了单纯的API调用,其高度抽象与伸缩性不是那么容易就能理解,希望同学们能耐心的学习,花时间去实践,磨刀不误砍柴工,只要有所领悟,它给你带来的不仅仅高效开发这么简单。

课程学习tips:

  1. 部分课时会有作业思考题,多思考多演练,这样才会有提升。
  2. 每个git上的commit对应课程上的一个课时,请勿直接切换到最新节点,你需要感受的是代码从0到1的过程,期间的TODO,实现,优化甚至重构才是精华。
  3. 课程中可能遇到的问题也可能是其他同学的问题,请在讨论区中提问,Stay会统一回复,这样Stay会有更多的精力来设计其他优质课程。
  4. 课程中的代码均为Stay手敲,但不推荐大家跟着视频照抄,务必一节课时或一整期课程看完后用自己的方式来实现。GIT代码只是用来借鉴。
  5. Stay重思维,轻编码。我希望传递的是思维方法,与我敲的代码无关,与我的陈述步骤无关。

技术没什么了不起,因为我们只是用技术在排列组合,而不是发明技术,所以我们没那么值钱。而且和流水线上的工人一样,麻木的坐在车间重复着组装。我们的大多数和他们的大多数一样,加班,生活单调。唯一的出路不是创业或者改行,而是不断的去尝试不同的组合,在不断的自我变革中寻找新的契机,新的自我。

看完了请给个反馈,好评我收下,差评我改进,谢谢。当然如果觉得不值,无条件退款。

生活不应该只有工作,Stay还有更多编程与感悟希望和你分享。如果我的磁场吸引到你,可以通过以下方式找到我。

课程目录

第1章课程重制V3版(更新完毕)

第2章大不一样(AS+GIT+MVC+互动)

  1. 你要的多任务下载是这样的吗
  2. 在写代码之前,我们该做些什么

第3章基础框架搭建

  1. 需求分析,技术点调研
  2. 伪代码+TODO串联一切
  3. 完善并验证完整业务流程

第4章完善主结构

  1. 单个任务的下载|暂停|取消|恢复
  2. 多任务的下载|暂停|取消|恢复
  3. 限制同时下载的最大任务数
  4. 小结以及实现任务全部暂停
  5. 实现全部任务恢复下载以及优化
  6. 添加数据库逻辑,防止App被强杀后的数据丢失

第5章下载核心实现

  1. 预处理:判断是否支持断点续传,以及文件大小
  2. 多线程单文件下载实现
  3. 暂停|恢复逻辑整理
  4. 取消下载并优化
  5. 下载流程梳理
  6. 当某条线程下载异常时的处理
  7. 不支持断点续传时使用单线程下载
  8. 无法预取文件长度时的下载操作

第6章多线程编程的那些坑

  1. Handler与线程的那些坑
  2. 多种方式解决多线程并发造成的数据脏读(上)
  3. 多种方式解决多线程并发造成的数据脏读(下)

第7章优化|测试

  1. 将hard code参数改为可配置的
  2. 多任务下载简单测试
  3. 模拟应用市场下载流程并优化
  4. 剩余细节的需求分析和解决方案

第8章暂时告一段落

  1. 小结:写代码之前必看

更多教程

教程不断整理更新中,以上截图仅供参考,如需了解更多视频教程的详细信息请到如下地址查看:

教程分类说明https://itvideos.github.io/categories/

获取方式

关于教程、获取方式、温馨提示

坚持原创技术分享,您的支持将鼓励我继续创作!