ios - 如果应用程序被杀死,NSURLSessionTask 会发生什么

标签 ios cocoa-touch nsurlsession

假设我有一个正在运行的NSURLSessionUploadTask。如果应用程序在该时间范围内被终止或崩溃,待处理的请求会发生什么?任务仍然会完成还是也会终止?

最佳答案

这是凭内存而来的,所以对它持保留态度。 IIRC,这取决于任务类型、任务的进度以及您提供的是正文数据对象还是正文流。

如果您使用的是非后台 session ,请求将被取消。

如果您正在使用后台 session :

  • 如果您通过 URL 请求对象或作为创建上传任务的一部分提供了正文数据对象,则上传应该完成,因为 session 基本上通过 XPC 将该数据对象发送到辅助进程,而辅助进程可以处理上传。当然,如果数据对象在崩溃前没有到达帮助程序,它就不会完成。

  • 如果您通过流提供正文,显然除非上传阶段完成,否则它不会完成,因为您的应用不会在那里提供数据。

如果上传完成,在 iOS 中,操作系统会在后台重新启动您的应用程序以处理接收到的数据;在 OS X 中,直到用户重新启动您的应用程序才会发生任何事情,此时操作系统会提供等待数据。

如果您使用的是上传任务,操作系统会在重新启动后像数据任务一样将数据传送到您的应用。然后,在 iOS 上(仅),它会告诉您它已交付所有未决事件,此时您的应用程序必须调用操作系统在您的应用程序首次重新启动时给您的回调,以告诉操作系统可以安全终止您的后台应用。

请注意,如果您的应用在接收来自上传任务 IIRC 的响应数据时崩溃,您的应用将不会重新启动。如果上传操作的实际结果对您的应用至关重要,请使用下载任务上传,并通过提供的 NSURLRequest 对象提供正文数据对象。

关于ios - 如果应用程序被杀死,NSURLSessionTask 会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31802656/

相关文章:

ios - iPad 模拟器与 iPad 2 的性能对比

ios - 如何使用Sprite Kit创建弯曲的水平边界

ios - 如何在 LHBezier 中检索 makeStatic 或 makeDynamic 方法? LevelHelper - Cocos2D

ios - 使用reverseGeocodeLocation:设置地址字符串,然后从方法返回

ios - 如何从 ARKit 相机获取外部矩阵?

iphone - 如何修复错误 'No memory available to program now: unsafe to call malloc'?

ios - 以编程方式同时关闭 UINavigation View 和模态视图

ios - NSURLSession didCompleteWithError :gets called with NSError is nil

ios - NSURLSession:handleEventsForBackgroundURLSession 方法不在后台 session 中运行

ios - 可达性与 NSURLSession 响应检测互联网连接