2015-01-10 110 views
3

我有点困惑与背景获取。我在Apple Developer文档中看到,当操作系统决定应该,用户无法控制后台抓取时,苹果公司员工在苹果开发者论坛发帖时发现抓取会发生,如果用户杀死应用程序(在家中双击并按钮向上滑动)背景获取不会发生,在这种情况下,用户可以控制后台获取。那么有人请向我澄清,如果用户使用任务管理器将应用程序杀死应用程序,背景获取仍然会在后台继续,或者与应用程序同时死亡。iOS背景取

苹果文档:

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

回答

6

从DOC你链接:

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

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

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

因此,苹果的工程师是正确的:强制退出应用程序将它放入一种特殊情况下,不允许后台提取。

+0

这真的很愚蠢,那么当应用程序在后台(用户杀死)时,无法发送本地通知?我简直无法相信苹果是这样做的...... – user4191892

+4

@ user4191892你说过,“应用程序在后台(被用户杀死)......”只是为了澄清,在用户杀死它之后,该应用程序不在“后台”它被终止。从开发人员的角度来看,我可以看到为什么你觉得这个功能很烦人,但从iOS设备用户的角度来看,这实际上是一个很好的功能。例如,有些应用程序正在做一些我觉得很烦人的事情,我觉得不得不离开应用程序,但实际上还要经过额外的步骤来明确地杀死它:如果它立即立即生效,我不会很高兴弹回。 – Rob

+0

是的,我同意你 – user4191892

0

我觉得这句话(从链接文件)是您所描述的情况是最重要的:

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

+0

@Rob看看最后一句话。 “如果用户终止你的应用程序,系统将取消所有未决任务。” – mbm29414

+0

非常好。我不确定我是否会将有关未决的NSURLSession背景任务的引用外推到当前的背景获取讨论中,但我现在看到您的观点。感谢澄清。 – Rob

1

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