使用 AFNetworking 2.0 处理后台任务
Posted
技术标签:
【中文标题】使用 AFNetworking 2.0 处理后台任务【英文标题】:Using AFNetworking 2.0 with background tasks 【发布时间】:2014-10-19 18:15:19 【问题描述】:我在使用 AFURLSessionManager 实现后台任务时遇到问题。
我正在创建一个带有 BaseURL 和 SessionConfiguration 的新 AFHTTPSessionManager,使用 NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:
并使用便捷的方法创建一个 POST 请求。
当我运行我的应用程序时,第一个请求正常发送,但第二个请求返回 A background URLSession with identifier ID already exists!
并导致应用程序崩溃。
我看过 Apple 的 WWDC 2013 视频,他们建议您只创建一次会话配置,使用
dispatch_once(&onceToken, ^
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.yourcompany.appId.BackgroundSession"];
session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
);
但是,AFURLSessionManager 的 session
属性设置为只读,我无法传递自定义 NSURLSession,只有一个 NSURLSessionConfiguration,它是在 AFURLSessionManager:init
内部创建的:
self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue];
我觉得我做错了什么,但我还能如何使用 AFNetworking 支持后台任务?
【问题讨论】:
【参考方案1】:你不能实例化一个新的AFHTTPSessionManager
然后改变它的session
来引用一些单例NSURLSession
是正确的。因此,您应该将 AFHTTPSessionManager
对象本身设置为可以在整个应用程序中重用的共享实例。
在end of this answer,我提供了一个使用 AFNetworking 进行后台会话的示例。
【讨论】:
我想你可以,但除非有迫切的需要,否则我不会打扰。对我来说感觉像是过早的优化...... 后期评论:我的应用程序使用共享的AFHTTPSessionManager
对象定期下载(用户提示),我想添加后台更新。我应该为此创建另一个AFHTTPSessionManager
吗?或者是否可以即时更改NSURLSessionConfiguration
?
是的,您需要单独的AFHTTPSessionManager
(或AFURLSessionManager
)。您不能即时更改configuration
。以上是关于使用 AFNetworking 2.0 处理后台任务的主要内容,如果未能解决你的问题,请参考以下文章
使用 AFNetworking 2.0 对请求进行分组或批量处理