我已经创建了后台nsurlsession来执行下载任务。当应用程序处于后台时,它运行良好。但是,当我关闭应用程序时,下载任务似乎被取消并失败(双击" Home"按钮并向上滑动),当我重新启动应用程序时,它再次从头开始下载。根据Apple文档,即使应用程序不再运行,后台传输仍可正常工作。我做错了吗?
答案 0 :(得分:2)
来自the NSURLSessionConfiguration Class Reference:
如果iOS应用程序被系统终止并重新启动,则应用程序可以使用相同的标识符来创建新的配置对象和会话,并检索终止时正在进行的传输的状态。此行为仅适用于系统正常终止应用程序。 如果用户从多任务处理屏幕终止应用程序,系统将取消所有会话的后台传输。
因此,如果iOS在正常情况下关闭您的应用程序,后台传输将继续进行,如果您强制退出多任务处理屏幕,它将终止您的所有转移。
答案 1 :(得分:1)
当用户强行退出时,应用程序不会重新启动后台下载。
application:didReceiveRemoteNotification:fetchCompletionHandler:的iOS8文档说:
使用此方法处理应用的传入远程通知。 与应用程序不同:didReceiveRemoteNotification:方法,即 只有当您的应用程序在前台即系统中运行时才会调用 当您的应用在前台运行或运行时调用此方法 背景。此外,如果您启用了远程通知 在后台模式下,系统启动你的应用程序(或从中唤醒它) 暂停状态)并在推送时将其置于后台状态 通知到了。但是,系统不会自动进行 如果用户强行退出,请启动您的应用。在那种情况下, 用户必须重新启动应用程序或在系统之前重新启动设备 尝试再次自动启动您的应用。
答案 2 :(得分:0)
在NSURLSession
documentation的第一段中,我们可以观察到:
此API提供了一组丰富的委托方法以供支持 身份验证并为您的应用程序提供执行后台的功能 在您的应用未运行时下载,或在iOS中,在您的应用运行时下载 暂停。
现在注意它所声明的地方:
或在iOS中暂停您的应用。
看起来只有OS X应用程序能够在您的应用程序未运行时完成后台任务。