后台传输下载任务失败时closures应用程序

我已经创build了后台nsurlsession来执行下载任务。 当应用程序在后台时,它运行良好。 然而,当我closures应用程序时,下载任务似乎被取消并失败(双击“Home”button并向上滑动),当我重新启动应用程序时,它使我从头开始重新下载。 根据苹果公司的文件,即使应用程序不再运行,后台传输也可以工作。 我做错了什么?

从NSURLSessionConfiguration类参考 :

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

所以,如果iOS正常closures应用程序,后台传输将继续,如果您强制从多任务屏幕退出,它将会终止您的所有传输。

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

应用程序的iOS8文档:didReceiveRemoteNotification:fetchCompletionHandler:说:

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

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

此API提供了一组丰富的委托方法来支持身份validation,并使您的应用能够在应用未运行时执行后台下载,或者在iOS中暂停应用时执行后台下载。

现在注意它说:

或者,在iOS中,您的应用已被暂停。

看起来只有OS X应用程序才能在应用程序不运行时完成后台任务。

Interesting Posts