3

我对后台获取有点困惑。我在 Apple Developer 文档中读到,当操作系统决定它应该获取时,用户无法控制后台获取,而在 Apple Developer 论坛上,Apple 员工的帖子说如果用户杀死应用程序(双击主页和按钮向上滑动)背景提取不会发生,在这种情况下用户可以控制后台提取。所以有人可以向我澄清一下,如果用户使用任务管理器杀死应用程序,后台获取仍然会在后台继续进行,或者它与应用程序同时被杀死。

苹果文档:

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH4-SW1

4

3 回答 3

6

从您链接的文档中:

当一个好的机会出现时,系统会唤醒或启动您的应用程序到后台并调用应用程序委托的 application:performFetchWithCompletionHandler: 方法。

因此,系统似乎能够在后台启动未运行的应用程序,因此它执行后台获取。但另一方面,您可以在文档的后面部分阅读:

在大多数情况下,系统不会在用户强制退出后重新启动应用程序。一个例外是定位应用程序,它在 iOS 8 及更高版本中在被用户强制退出后会重新启动。但是,在其他情况下,用户必须明确启动应用程序或重新启动设备,然后系统才能将应用程序自动启动到后台。

因此,Apple 的工程师是对的:强制退出应用程序会将其置于一种不再允许后台获取的特殊情况。

于 2015-01-10T14:43:52.940 回答
1

如果用户觉得需要允许后台操作,他不会杀死应用程序。但是当他杀死它时,只适合禁止后台获取。用户只能通过允许后台获取/终止应用程序来控制是否应该进行后台获取。但是一旦应用程序处于后台,用户就无法控制“何时”后台获取发生。操作系统根据它的免费程度来确定它。

于 2015-02-27T05:25:35.080 回答
0

我认为这句话(来自链接的文档)对于您所描述的场景来说是最重要的:

配置完成后,您的 NSURLSession 对象会在适当的时间将上传和下载任务无缝移交给系统。如果任务在您的应用程序仍在运行时完成(无论是在前台还是在后台),会话对象会以通常的方式通知其委托。如果任务尚未完成且系统终止您的应用程序,系统会自动继续在后台管理任务。如果用户终止您的应用程序,系统将取消所有待处理的任务。

于 2015-01-10T14:47:16.723 回答