应用程序关闭时,后台传输下载任务失败

时间:2014-06-13 16:00:55

标签: ios nsurlsession nsurlsessiondownloadtask background-task

我已经创建了后台nsurlsession来执行下载任务。当应用程序处于后台时,它运行良好。但是,当我关闭应用程序时,下载任务似乎被取消并失败(双击" Home"按钮并向上滑动),当我重新启动应用程序时,它再次从头开始下载。根据Apple文档,即使应用程序不再运行,后台传输仍可正常工作。我做错了吗?

3 个答案:

答案 0 :(得分:2)

来自the NSURLSessionConfiguration Class Reference

  

如果iOS应用程序被系统终止并重新启动,则应用程序可以使用相同的标识符来创建新的配置对象和会话,并检索终止时正在进行的传输的状态。此行为仅适用于系统正常终止应用程序。 如果用户从多任务处理屏幕终止应用程序,系统将取消所有会话的后台传输。

因此,如果iOS在正常情况下关闭您的应用程序,后台传输将继续进行,如果您强制退出多任务处理屏幕,它将终止您的所有转移。

答案 1 :(得分:1)

当用户强行退出时,应用程序不会重新启动后台下载。

application:didReceiveRemoteNotification:fetchCompletionHandler:的iOS8文档说:

  

使用此方法处理应用的传入远程通知。   与应用程序不同:didReceiveRemoteNotification:方法,即   只有当您的应用程序在前台即系统中运行时才会调用   当您的应用在前台运行或运行时调用此方法   背景。此外,如果您启用了远程通知   在后台模式下,系统启动你的应用程序(或从中唤醒它)   暂停状态)并在推送时将其置于后台状态   通知到了。但是,系统不会自动进行   如果用户强行退出,请启动您的应用。在那种情况下,   用户必须重新启动应用程序或在系统之前重新启动设备   尝试再次自动启动您的应用。

答案 2 :(得分:0)

NSURLSession documentation的第一段中,我们可以观察到:

  

此API提供了一组丰富的委托方法以供支持   身份验证并为您的应用程序提供执行后台的功能   在您的应用未运行时下载,或在iOS中,在您的应用运行时下载   暂停。

现在注意它所声明的地方:

  

或在iOS中暂停您的应用。

看起来只有OS X应用程序能够在您的应用程序未运行时完成后台任务。