NSURLSession何时运行?

时间:2013-10-07 23:18:17

标签: ios push-notification nsurlconnection nsurlsession

我遇到这种情况,当设备收到推送通知时,我会发送一个NSURLSessionNSURLConnection相结合。关于NSURLSession,我有几个问题。

如果互联网连接丢失,NSURLSession's数据任务是否会在后台自动恢复?

如果最初没有互联网,NSURLSession是否会自动尝试完成任务,或者会话是否因错误而返回?

3 个答案:

答案 0 :(得分:4)

看起来你需要处理重试。

  

当任何任务完成时,NSURLSession对象会调用委托   URLSession:task:didCompleteWithError:带有错误的方法   object,如果任务成功完成,则为nil。如果任务是   可恢复的下载任务,NSError对象的userInfo字典   包含NSURLSessionDownloadTaskResumeData键的值。您的   应该使用可访问性API来确定何时重试,以及   然后应该调用downloadTaskWithResumeData:或   downloadTaskWithResumeData:completionHandler:创建一个新的下载   任务继续下载。转到第3步(创建并恢复   任务对象)。

https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/URLLoadingSystem/NSURLSessionConcepts/NSURLSessionConcepts.html

答案 1 :(得分:3)

如果互联网连接丢失,NSURLSession的数据任务是否会在后台自动恢复?

如果互联网连接丢失,您将在委托方法NSURLErrorNetworkConnectionLost中收到错误URLSession:task:didCompleteWithError(错误代码:-1005)。您负责使用invalidateAndCancel或finishAndInvalidate重试和/或使会话无效(虽然在网络连接丢失的情况下它已经完成)。

如果最初没有互联网,NSURLSession是否会自动尝试完成任务,或者会话是否因错误而返回?

如果没有互联网连接,您将在委托方法NSURLErrorNotConnectedToInternet中收到错误URLSession:task:didCompleteWithError(错误代码:-1009)。您有责任使用invalidateAndCancel或finishAndInvalidate使会话无效(如果需要)(虽然在没有互联网连接的情况下它已经完成)。

参考文献:

URL Loading System Programming Guide

Foundation Constants Reference

答案 2 :(得分:1)

如果您在NSURLSession中使用后台配置,则当您的应用处于活动状态或后台时,代理会在成功/失败时被调用。 您创建的任务将移交给操作系统的恶魔并且您的应用程序正在被唤醒甚至启动(如果它被iOS杀死)

`application:handleEventsForBackgroundURLSession:completionHandler`:

当所有任务完成后,您的会话代理将被调用

URLSessionDidFinishEventsForBackgroundURLSession:   

有关后台会话的更多详情,请here

您还可以获取Apple示例代码here并查找“简单背景传输”