iOS后台获取

时间:2015-01-10 14:35:07

标签: ios background-fetch

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

Apple文档:

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

3 个答案:

答案 0 :(得分:6)

来自您链接的文档:

  

当一个好机会出现时,系统会将你的应用程序唤醒或启动到后台并调用app delegate的应用程序:performFetchWithCompletionHandler:method。

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

  

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

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

答案 1 :(得分:1)

如果用户觉得需要允许后台操作,他就不会杀死该应用。但是当他杀死它时,只允许禁止后台获取。用户只能通过允许它保留在后台/通过终止应用程序来控制是否应该进行后台获取。但是一旦应用程序处于后台,用户就无法控制"当"背景提取发生了。操作系统根据它的空闲程度来确定它。

答案 2 :(得分:0)

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

  

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