2

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

4

3 回答 3

2

NSURLSessionConfiguration 类参考

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

因此,如果 iOS 本身在正常过程中关闭您的应用程序,后台传输将继续,但如果您强制从多任务屏幕退出,它将终止您的所有传输。

于 2014-11-12T10:04:18.580 回答
1

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

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

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

于 2014-11-12T05:14:07.157 回答
0

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

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

现在注意它在哪里声明:

或者,在 iOS 中,当您的应用程序被暂停时。

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

于 2014-06-15T16:41:30.143 回答