在后台运行应用程序?

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

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

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

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

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

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

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

在应用关闭后大约15分钟,您可以在后台保持套接字连接活动(或执行其他任何操作)。 如果您的应用程序适合其支持的类别之一,Apple还支持更专业的后台处理模式(特别是音频,voip和位置)。 看到这里 。

如果您希望无限期地发送用户通知,则需要使用Apple推送通知服务 。 这允许您的应用在未运行时继续接收通知,并且由于一次只有一个连接到APN服务,因此节省了资源。

您绝对可以通过本地和推送通知提醒用户。 据我所知,您可以在有限的时间内保持连接打开。

在这里查看更多详情。