在默认情况(不做特别设置)下,AFNetworking并未启用backgroundSession,是不支持后台下载的。
NSURLSession对后台下载的支持主要通过 backgroundSessionConfiguration/backgroundSessionConfigurationWithIdentifier 类型的session来支持
1⃣️创建sessionManager来管理,通过Configuration 配置
NSURLSessionConfiguration *cfg= [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"downInBackground"];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:cfg];
2⃣️添加下载任务
3⃣️实现相关协议
NSURLSessionDownloadTaskDelegate协议有如下3个方法:
//这个方法在下载过程中反复调用,用于获知下载的状态
- (void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
//这个方法在下载完成之后调用,用于获取下载后的文件
- (void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didFinishDownloadingToURL:(NSURL *)location
//这个方法在暂停后重新开始下载时调用,一般不操作这个代理
- (void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
注意:backgroundSession可能更喜欢使用- setDownloadTaskDidFinishDownloadingBlock:来指定用于保存下载文件的URL,而不是使用destination block 。