有没有办法在iOS 7中连接后台任务(例如切换位置服务的使用)以在特定时间点(例如明天早上)运行而无需用户打开应用程序,或者没有经常运行后台进程?
我所知道的唯一选择是在所需的时间向设备发送推送通知,但有没有人知道任何纯粹的设备替代方案吗?
答案 0 :(得分:4)
any purely on-device
- 不幸的是到现在为止 - 2014年没有这样的方法。 iOS 7中出现的Background task execution if content avaliable
相当不错,但它基于推送。
因此,当应用程序被暂停时,它无法让ANYTHING
直接唤醒自己。它之前无法安排NSTimer
,它无法使用performSelector:afterDelay
之类的内容,依此类推。应用程序再次变为活动状态的ONLY
方式是USER HIMSELF
执行某些操作以使其处于活动状态,例如收到本地通知并启动警报。只有当应用程序具有后台模式时,才允许在后台模式下长时间执行应用程序,这些模式为:voip,audio,location,newstand。注意:从iOS 9开始,kCFStreamNetworkServiceTypeVoIP
现已弃用,VoIP应用程序应使用PushKit(VoIP高优先级推送通知)。即使它具有这些类型中的一种,应用程序也不能在没有某些限制的情况下执行其代码。您可以在文档中阅读它。所以我们必须接受这种事态。可能是未来的某个时间Apple工程师将进行真正的多任务处理,或者至少在接收本地通知时执行后台任务执行或者安装所有应用程序的某些全球后台任务。但我不相信这一点,因为第三方流程的有限背景执行是iOS调度程序的核心设计,它是CMU Mach 3调度程序的修改版本。