【问题标题】:Does AFNetworking have backgrounding support?AFNetworking 有后台支持吗?
【发布时间】:2011-12-09 16:18:59
【问题描述】:

我正在调查AFNetworking 以替代ASIHTTPRequest,并注意到完全缺乏关于它是否支持后台下载/上传的信息。

使用ASIHTTPReqeust 对象,您只需调用[request setShouldContinueWhenAppEntersBackground:YES],请求将在后台继续。 AFNetworking 中是否对此有任何支持?

【问题讨论】:

  • 如果没有(我不确定AFNetworking 中是否是否支持后台执行),您可以随时移植您想要的任何额外功能AFNetworking 改成ASIHTTPRequest,或者给AFNetworking添加后台执行支持(比较简单)。

标签: iphone ios asihttprequest afnetworking


【解决方案1】:

编辑:截至AFNetworking 1.0RC1,这是一个显式功能。 AFURLConnectionOperation 现在有了 setShouldExecuteAsBackgroundTaskWithExpirationHandler: 方法,它透明地为您管理所有这些。


这是一个隐含的功能,所以我并没有真正考虑过宣传它。您需要做的就是:

- (void)applicationWillResignActive:(UIApplication *)application { __block UIBackgroundTaskIdentifier backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^(void) { [application endBackgroundTask:backgroundTaskIdentifier]; [[YourRestClient sharedClient] cancelAllHTTPOperations]; }]; }

或者,如果您在自己的 NSOperationQueue 中管理您的运营,则只需在此处使用 -cancelAllOperations

【讨论】:

  • Mattt - 听起来您提供了一个在进入后台时取消网络的解决方案,尽管问题是在进入后台时产生/继续 AFNetworking 操作。对此有什么想法?鉴于大多数 AF 方法都是基于块/立即返回的,我发现系统认为它们在真正运行其课程之前就已完成......也许只是在后台模式下运行时使用 waitUntilFinished?
  • @Hunter 我想,你理解错了。调用 beginBackgroundTaskWithExpirationHandler 确保请求在后台继续。在应用处于非活动状态较长时间(例如 10 分钟)之前,请求不会被取消。
  • 警告:不要在 applicationWillResignActive 上使用 mattt 的 beginBackgroundTaskWithExpirationHandler 代码而不添加对 endBackgroundTask 的匹配调用 - 否则 IOS 将在 600 秒后终止您的应用程序,并且前台将重新启动您的应用程序。
  • - (void)applicationWillResignActive:(UIApplication *)application { UIBackgroundTaskIdentifier backgroundIdentifier = [application beginBackgroundTaskWithExpirationHandler:^(void) { [[AFHTTPClient sharedClient] cancelAllHTTPOperations]; }]; [application endBackgroundTask:backgroundIdentifier]; }
  • @mattt 您可能想要更新您的答案以提及您添加的setShouldExecuteAsBackgroundTaskWithExpirationHandler:。我没有意识到它在我几周前下载的版本中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多