下载任务的可调并发、Range 续传、应用重启恢复与标签写入容错
下载架构
NeriPlayer 的下载不走系统 DownloadManager,而是用应用内的 AudioDownloadManager 直接管理:
- 共享
OkHttpClient做 HTTP 传输 - 可调并发,默认 6,最高 8
- 工作文件 + sidecar 元数据管理完整落盘流程
- 使用
WorkManager做延迟与周期调度
续传策略
| 传输类型 | 续传方式 |
|---|---|
| 直接 HTTP 传输 | 按 Range 头分块,支持断点续传 |
| 平台需显式 Range | 按分块 Range 请求 |
| HLS | 按分片续传,失败分片跳过继续 |
下载队列的持久化
- 下载队列会持久化——应用重启后自动恢复未完成任务
- 已落盘的完整文件在启动时会直接结算为完成状态(不会重新下载)
- 网络策略(Wi-Fi / 移动 / 漫游)暂停后可继续
- 手动取消会清理半成品文件,语义边界清晰
标签写入的容错
下载完成后应用会尝试把歌曲的元数据(标题、歌手、专辑、封面)写入音频标签(ID3v2 / Vorbis Comment)。如果标签写入失败:
- 已落盘的音频仍然保留,不会因为标签写失败被删掉
- 下次启动时可重新应用标签
保存的额外数据
下载完成后除了音频本身,还会同步保存:
- 歌词:LRC 或 YRC 格式,与音频同目录 sidecar
- 封面:嵌入音频标签的同时,可选额外保存一张 sidecar 图片
- 元数据:艺术家、专辑、时长、来源平台信息
高风险网络提示
批量或单曲下载在高风险网络(移动 / 漫游)下会主动弹出提示,让用户确认后再继续下载——避免把「省流量」只做成设置页里的摆设。
- [可迁移下载目录]${1}05-download-dir-migrate.md${2}