urlsession 与后台下载

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

什么时候是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上没有问题了。
也不需要维护什么等待队列和进行队列这些东西了。、、

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值