我需要我的iPhone应用程序在暂停时在后台执行某些任务,但在关闭后我不需要执行任何任务。我是否需要解决UIBackgroundMode
?
答案 0 :(得分:5)
是的,要在后台状态下连续执行代码,您需要注册给定的UIBackgroundMode。
但是,如果您只想执行单个后台任务(任务完成),则不需要后台模式。
在回复下面的评论时,我会尽量明确:
在iOS中,即使在iOS 7中,当应用程序无限期处于后台状态时,也无法运行任意代码。
用简单的英语, - 只要你愿意,你就不能在后台运行你喜欢的任何代码。
有规则。
这些规则在iOS 7中有所放松,但它仍然没有完全不受限制。
考虑一下你的情况:你有一个想要连续调用方法的计时器。
现在考虑使用UIBackgroundModes(允许你在各种情况下在后台运行):
音频 - 仅适用于基于音频的应用。
位置 - 仅当您的应用可识别位置时,才会执行特定的位置任务
voip - VOIP(Skype等)
抓取(后台抓取 - 一种新的iOS 7 API,系统会为您提供抓取新内容 认为合适时的应用时刻。
远程通知 - iOS 7中的新功能,当设备收到具有特定有效负载的远程推送通知时,它将恢复并执行某段代码。
报亭内容 - 仅适用于报摊应用
external-accessory - 仅限外部配件与设备通信
bluetooth-peripheral 仅限外部BT配件与设备通信(fitbit)
如您所见,如果您不属于这些类别之一,则无法使用这些模式。 如果您滥用Apple的模式,Apple将不会批准您的申请。
最后我们有'后台任务完成'
这是一种使用UIBackgroundTask在后台执行您想要的任何代码的方法!包括调用方法的计时器! - 虽然有一个问题......
这应该是'任务完成'(Facebook上传不完整,保存或处理应用程序暂停之前应该完成的数据,即使用户按下主页按钮)。
听起来不错,但您只能使用此方法在后台运行最多10分钟。如果你超过这个时间限制iOS会立即杀死你的应用程序。
正如您所看到的,您的应用程序无法在商店中获得批准,并且无法通过调用您方法的计时器在后台运行。
很抱歉。
如果您想了解更多信息,请查看this。
答案 1 :(得分:-2)
使用位置服务并设置NO位置管理器“pausesLocationUpdatesAutomatically”属性。