URLSessionDownloadTask 表示一个后台下载任务实例。
它由 BackgroundURLSession.startDownload() 或 BackgroundURLSession.resumeDownload() 创建,用于在前台或后台下载文件,并可在脚本被终止后继续运行。
每个下载任务都由系统负责调度与执行,并提供进度、状态和事件回调等信息。
任务在创建后需手动调用 resume() 开始任何。
id: string下载任务的唯一标识符。 可用于在脚本重启后识别同一个下载任务。
示例
state: URLSessionTaskState当前任务的状态。
可能的值包括:
"running":任务正在进行中"suspended":任务已暂停"canceling":任务正在取消中"completed":任务已完成"unknown":状态未知(通常表示任务已被系统移除)示例
progress: URLSessionProgress任务的实时进度信息。
包含以下字段:
fractionCompleted: number:完成比例(0–1)totalUnitCount: number:总字节数completedUnitCount: number:已完成字节数isFinished: boolean:是否已完成estimatedTimeRemaining: number | null:预计剩余时间(秒),可能为 null示例
priority: number任务的优先级(0.0–1.0),默认值为 0.5。
值越高,系统越可能优先调度此任务。
示例
earliestBeginDate?: Date | null任务可开始执行的最早时间。 可用于延迟任务开始(例如在网络空闲时再执行)。
示例
countOfBytesClientExpectsToSend: number客户端预计将要发送的字节数(仅供系统参考,不影响任务执行)。
countOfBytesClientExpectsToReceive: number客户端预计将要接收的字节数(仅供系统参考,不影响任务执行)。
onProgress?: (details) => void当下载进度变化时调用。
details 参数包含:
progress: number:完成比例(0–1)bytesWritten: number:本次写入的字节数totalBytesWritten: number:已下载的总字节数totalBytesExpectedToWrite: number:预期的总下载字节数示例
onFinishDownload?: (error, details) => void当下载完成(或失败)后调用。
参数说明
error: Error | null:若下载失败则为错误对象,否则为 null。details.temporary: string:临时文件路径。details.destination: string | null:目标文件路径(如果下载成功则为目标路径,否则可能为 null)。注意:文件在下载完成后系统会自动移动到指定 destination 路径。
示例
onComplete?: (error, resumeData) => void任务完全结束时调用,无论成功或失败都会触发。
参数说明
error: Error | null:若任务失败则为错误对象,否则为 null。resumeData: Data | null:如果任务支持断点续传且失败,可通过此数据恢复下载。示例
suspend(): void暂停任务。
暂停后不会再产生网络流量,也不会超时。
稍后可通过 resume() 继续。
示例
resume(): void恢复被暂停的任务。
仅在任务处于 "suspended" 状态时可调用。
示例
cancel(): void取消任务。
调用后立即返回,任务状态变为 "canceling",完成后触发 onComplete 回调并带上错误信息。
示例
cancelByProducingResumeData(): Promise<Data | null>取消任务并生成可续传的数据。
若任务支持断点续传,返回的 Data 可用于恢复下载;否则返回 null。
可在之后使用:
示例
resume() 开始下载。suspend())可稍后用 resume() 继续执行。cancelByProducingResumeData() 可实现断点续传功能。BackgroundURLSession.getDownloadTasks() 找回任务并重新绑定回调。notifyOnFinished 以便用户了解进度完成状态。