1. OkDownload功能使用与文件下载的大致流程

1,457 阅读3分钟

Author: istyras
Date: 2024-10-12
Update: 2024-10-12


0. OkDownload 组件

OkDownload 组件,是由流利说App开发团队开发并开源的一款强大的文件下载功能组件。

完整的使用文档

1. 简单使用

1.1. 启动一个下载任务与取消任务

DownloadTask task = new DownloadTask.Builder(url, parentFile)
         .setFilename(filename)
         // the minimal interval millisecond for callback progress
         .setMinIntervalMillisCallbackProcess(30)
         // do re-download even if the task has already been completed in the past.
         .setPassIfAlreadyCompleted(false)
         .build();

task.enqueue(listener);

// cancel
task.cancel();

// execute task synchronized
task.execute(listener);

1.2. 启动多个任务和取消

// This method is optimize specially for bunch of tasks
DownloadTask.enqueue(tasks, listener);

// cancel, this method is also optmize specially for bunch of tasks
DownloadTask.cancel(tasks);

1.3. 下载任务队列的启动与取消

DownloadContext.Builder builder = new DownloadContext.QueueSet()
        .setParentPathFile(parentFile)
        .setMinIntervalMillisCallbackProcess(150)
        .commit();
builder.bind(url1);
builder.bind(url2).addTag(key, value);
builder.bind(url3).setTag(tag);
builder.setListener(contextListener);

DownloadTask task = new DownloadTask.Builder(url4, parentFile)
        .setPriority(10).build();
builder.bindSetTask(task);

DownloadContext context = builder.build();

context.startOnParallel(listener);

// stop
context.stop();

上述就是简单的使用 OkDownload 进行文件下载的方式。



下面我们开始分析 OkDownload 进行文件下载时的大致流程,在进行分析的时候,如果对于文件下载的流程不熟悉的同学,建议先阅读本系列的开篇文章 《0. 由浅到深地阐述文件下载的原理》,以便能够更好的理解我们接下来对 OkDownload 这款强大的文件下载组件的框架设计。


2. OkDonwload 文件下载的大致流程分析

在阅读和分析源码的情况下,我们可以通过 OkDownload 的下载监听的回调流程来理解其内部的下载流程。

2.1. 简单的下载流程回调

OkDownload.DownloadListener1.png

如图所示,简单的文件下载流程,从任务开始->任务连接->进度回调->任务结束。其中还有一个失败重试的过程。

2.2. 稍复杂的下载流程回调

OkDownload.DownloadListener4.png

如图所示,在这个稍复杂的下载流程回调中,增加了连接相关的流程( connectStart, connectEnd )和 分片下载的相关流程( processBlock, blockEnd )。

2.2.1. 连接相关的流程

连接流程,处理的是真正下载开始之前,预请求资源地址,获得下载的目标资源相关的一些信息(比如:资源大小、是否支持分片下载等等),同时可以判断给定的地址是否需要重定向,判断目标地址是否有效。

当然,由于 OkDownload 支持断点续传、分片下载,所以在连接检查的过程中,同时还会结合本地已经完成的部分记录信息,对已完成部分,以及没有完成部分进行更严格的校验。

所有的校验,都只有一个目的:为了确保下载的资源文件完整与正确。

2.2.2. 进度回调流程

因为支持分片下载,所以下载进度的回调细分的话,还有每个分片部分的流程回调,而整体进度的回调会汇总每个分片的进度总和进行回调出来,这样对于使用方来说就能够得到目标资源的实际的下载进度。

2.3. 完整的下载流程回调

OkDownload.DownloadListener.png 如图所示,完整的下载流程回调中,增加了 断点续传 的状态回调,同时在分片下载的流程中还详细的回调了单块文件下载的全部状态流程。

到此为止,我们对 OkDownload 有粗略地了解,后续我们将开始对其源码进行详细的分析。