如果app被杀死,NSURLSessionTasks会发生什么

时间:2015-08-04 06:57:55

标签: ios cocoa-touch nsurlsession

我们说我有一个正在运行的NSURLSessionUploadTask。如果应用程序在该时间段内被杀死或崩溃,那么待处理请求会发生什么?任务是否仍然完成或是否也已终止?

2 个答案:

答案 0 :(得分:1)

这是来自记忆,所以带上一粒盐。 IIRC,它取决于任务类型,任务进展的程度以及您是否提供了正文数据对象或正文流。

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

如果您正在使用后台会话:

  • 如果您通过URL请求对象提供了一个正文数据对象,或者作为创建上传任务的一部分,则上传应该完成,因为会话基本上通过XPC将该数据对象发送给帮助程序进程,并且帮助程序可以处理上传。当然,如果数据对象在崩溃之前没有进入帮助程序,它将无法完成。

  • 如果您通过流提供了正文,那么除非上传阶段结束,否则很明显无法完成,因为您的应用不会提供数据。

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

如果您正在使用上传任务,操作系统会在重新启动后将数据传送到您的应用,就像数据任务一样。然后,在iOS(仅)上,它告诉您它已经发送了所有待处理事件,此时您的应用必须调用操作系统在您的应用首次重新启动时给您的回调,告诉操作系统可以安全地杀死你的背景应用程序。

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

答案 1 :(得分:0)

来自Apple's Documentation

  

如果系统在挂起状态下终止了该应用程序,则系统会在后台重新启动该应用程序。

它位于“如果应用终止,则重新创建会话”部分。它说明了发生了什么以及如何在应用启动时重新建立会话,以便可以正确处理后台流程。