urlsession 与后台下载

来源:互联网 发布:linux shell 打开目录 编辑:程序博客网 时间:2024/06/06 16:01

文件下载研究了几天
有两个问题始终绕不过去

什么时候是ui中的等待中?
什么时候是ui中的下载中?

后台下载怎么处理

苹果所暴露出来的代理

只有下载进度
下载完成数据

相关的代理

typedef NS_OPTIONS(NSUInteger, WHCDownloadState) {    WHCNone = 1 << 0,    WHCDownloading = 1 << 1,    WHCDownloadCompleted = 1 << 2,    WHCDownloadCanceled = 1 << 3,    WHCDownloadWaitting = 1 << 4};

什么意思呢 这里的loading waiting 状态 都是不会存在的

只有none completed cancel 三种状态
分别对应
什么操作也没用
下载完成
下载到一半没有继续下了
这三种状态 ,至于本地什么状态也不存

当重新从缓存数据库中读取的时候
根据本地模型的
当前下载的大小 和需要下载的大小比对
当两个大小相同 ,代表下载完成
当小于需要下载的大小,代表任务取消了。对应任务暂停
剩下的就是什么操作也没有了

 _downloadState = _totalLenght != 0 ? (self.currentDownloadLenght == self.totalLenght ? WHCDownloadCompleted : WHCDownloadCanceled) : WHCNone;

其余的东西呢

应该全部去ui里面处理


如果是cell 就去cell 里面处理状态

首先设置初始状态
只要不是完成状态 或者取消状态
都设置成为等待状态

再判断一下当前队列里面有没有取消状态的
也设置成为等待状态

接收到进度条反馈代理的时候
改为loading状态

接收到完成代理
判断是否成功
成功改为complete状态
失败改为cancel状态

接收到error代理
就把任务变为none状态

这些状态都是ui的
这样做出来就能保证UI上没有问题了。
也不需要维护什么等待队列和进行队列这些东西了。、、

这个和我很久之前的录音上传的思路是一样的

突然强退的任务是不存在上传中这样的状态的

因此只有默认的上传失败 和上传成功两种状态在本地

而后台下载更甚 什么状态我都不存,存了我也不判断

而是通过读取了多少数据来判断状态到哪里了。

这才是最简单的结题思路呀。

原创粉丝点击