在后台运行应用程序?

ary*_*axt 7 iphone objective-c ios

是否可以在后台保持套接字连接,以便能够随时推送新数据并提醒用户?

Red*_*ing 19

这个问题的答案是肯定的.如果您处于后台状态,则可以保持连接打开并处理来自服务器的消息.

不幸的是,这里的复杂性是你没有很多控制你的应用程序所处的状态:

  • 前景 - 用户点击了您的图标,应用程序正在运行且UI可见.
  • 暂停 - 用户之前在前台运行您的应用程序,但通过按主页按钮或接听电话暂停它.基本上你的应用程序是"冻干"的,并且在用户恢复之前(从它停止的地方开始)或者由操作系统终止(见下文),它将保持不活动状态.
  • 后台 - 该应用程序以前在前台运行,但由于用户已完成某些操作而已移至后台状态.通常情况下,你的应用程序会在这种情况下移动到暂停状态,但有些事情你可以作为开发人员来防止即时'冻干'并进入后台(见下文).如果您的应用程序因重大更改事件而被唤醒,您的应用程序也将处于后台状态.
  • 已终止 - 您的应用已从内存中卸载,下次启动时将从头开始.当您双击主页按钮然后点击应用程序图标旁边的x时会发生这种情况.它将应用程序从挂起状态移动到终止状态.如果操作系统确定需要为最近运行的应用程序提供空间并且您的应用程序已被暂停很长时间,也会发生这种情况.

显然,这里的诀窍是如何尽可能长时间地处于背景状态.有几种方法可以做到这一点:

  • 请求更多时间 - 如果您要求应用程序关闭,您可以在最多10分钟的额外后台处理.
  • 使用UIBackgroundMode - 您可以通过将相应的UIBackgroundMode值添加到pList 来声明自己的voip,音频位置应用程序.这些类型的应用程序有特殊要求,您可以在这里查看.

所以这些方法并非没有自己的问题(在商店获得批准就是其中之一),因此我倾向于同意其他答案,使用推送通知可能是通知用户的最佳方法.随着iOS5中通知改进,这将是未来最好的用户体验.