如何在后台每小时运行一个〜30秒的进程(iphone应用程序)

我有一个iPhone应用程序,有一个30秒的进程,做一些networkingIO。 基本上,当应用程序在后台,我希望这个过程每小时运行(实际上每天一次,但如果失败,我希望它在一个小时内重新运行)。

有了ios 4的背景特征,这可能吗? 如果是这样,怎么样? 我会碰到什么限制?

非常感谢!

看看苹果公司关于在后台运行代码的文档。

http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html

处理后台任务的方法很less。 唯一可以完全后台处理的应用程序是“audio”,“voip”和“位置”应用程序,这需要在Info.plist中声明。

如果你的应用程序不是这种types,你可能会很难做到你想要的东西。 有一些方法可以让你的应用程序在后台保持有限的时间(也在该链接),但最终你的应用程序将被closures。

本地通知只会提示用户打开应用程序 – 你是否真的想每隔30秒在手机上popup警报?

我正在做一些类似的研究,看看这个答案 ,如果你以前没有find它的话。 DataMan或Data Usage等应用程序必须在后台执行某种types的定期代码,所以我不能100%确信所要求的是不可能的。

我相信,使用本地通知将有助于….检查以下….

  1. http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1
  1. 应用程序可以创build和调度本地通知,然后操作系统按计划date和时间交付它。 如果应用程序在前台处于非活动状态时传送,则会显示警报,标记应用程序图标或播放声音 – 无论在UILocalNotification对象中指定了什么。 如果应用程序在前台运行,则没有警报,徽章或声音; 相反,应用程序:didReceiveLocalNotification:方法被调用,如果委托实现它。

  2. 委托可以检查通知的属性,如果通知在其userInfo字典中包含自定义数据,则可以访问该数据并相应地处理该数据。 另一方面,如果本地通知仅标记应用程序图标,并且用户作为响应启动应用程序,则会调用application:didFinishLaunchingWithOptions:方法,但在选项字典中不包含UILocalNotification对象。