假设我有一个正在运行的NSURLSessionUploadTask
。如果应用程序在该时间范围内被终止或崩溃,待处理的请求会发生什么?任务仍然会完成还是也会终止?
最佳答案
这是凭内存而来的,所以对它持保留态度。 IIRC,这取决于任务类型、任务的进度以及您提供的是正文数据对象还是正文流。
如果您使用的是非后台 session ,请求将被取消。
如果您正在使用后台 session :
如果您通过 URL 请求对象或作为创建上传任务的一部分提供了正文数据对象,则上传应该完成,因为 session 基本上通过 XPC 将该数据对象发送到辅助进程,而辅助进程可以处理上传。当然,如果数据对象在崩溃前没有到达帮助程序,它就不会完成。
如果您通过流提供正文,显然除非上传阶段完成,否则它不会完成,因为您的应用不会在那里提供数据。
如果上传完成,在 iOS 中,操作系统会在后台重新启动您的应用程序以处理接收到的数据;在 OS X 中,直到用户重新启动您的应用程序才会发生任何事情,此时操作系统会提供等待数据。
如果您使用的是上传任务,操作系统会在重新启动后像数据任务一样将数据传送到您的应用。然后,在 iOS 上(仅),它会告诉您它已交付所有未决事件,此时您的应用程序必须调用操作系统在您的应用程序首次重新启动时给您的回调,以告诉操作系统可以安全终止您的后台应用。
请注意,如果您的应用在接收来自上传任务 IIRC 的响应数据时崩溃,您的应用将不会重新启动。如果上传操作的实际结果对您的应用至关重要,请使用下载任务上传,并通过提供的 NSURLRequest 对象提供正文数据对象。
关于ios - 如果应用程序被杀死,NSURLSessionTask 会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31802656/