当应用程序在后台或设备被锁定时运行代码

时间:2012-07-03 00:28:38

标签: iphone objective-c ios cocoa-touch

我有一段代码,我在那里拨打服务器电话,并根据响应播放声音。现在,当我的应用程序处于后台或我的设备被锁定时,这不起作用。

即使应用程序处于后台或设备被锁定,我们是否可以执行此代码(服务器调用和响应处理)?

1 个答案:

答案 0 :(得分:5)

没有通用解决方案,这是设计使然。 (Apple不希望您在后台运行潜在的CPU和功耗密集型流程,并降低用户体验。)

有几个有限的案例可供选择:

  1. 你说你想播放声音。如果您的意思是“播放音乐”或某些此类流媒体,则您的应用程序可以注册执行音频background task。请注意,您必须实际是流媒体音频;苹果公司对试图使用这种方法规避一般案件禁令的应用程序不屑一顾,并会相应地拒绝你的App Store提交。
  2. 您可以反转您的方案,让服务器通过Apple Push Notification service发送推送通知。根据用户的设置,可能会产生警报,徽章或声音。如果您不播放音频,这可能是最适合您的。
  3. 如果您真正打算做的是完成上传或下载(并且声音是完成通知),那么在应用程序名义上背景或设备已锁定后,您可以请求一些额外的时间来完成该任务。在相应的UIApplicationDelegate方法中使用-[UIApplication beginBackgroundTaskWithExpirationHandler:]来注册此类任务。请注意,您完成任务的时间有限(但可观),我认为您不能在此模式下播放媒体。