在后台轮询服务器的正确方法

时间:2010-10-27 11:46:19

标签: iphone multitasking

假设这是可能的,我希望我的iOS应用程序在后台运行时轮询服务器(即基本上每隔30分钟检索一次URL的内容并通知用户它是否包含“有趣”的内容),基本上是如果您没有使用推送通知,则类似于内置邮件客户端的工作方式。

现在,从我到目前为止的阅读(我是一位经验丰富的程序员,但对iOS新手),我认为可能有两种可能的方法来实现这一目标:

  • 方法1:在applicationDidEnterBackground:中,启动执行定期轮询的后台任务;
  • 方法2:向用户发送一个没有可见文本的UILocalNotification,但这只是用于在X分钟内唤醒您的应用以进行轮询(然后为下一个时间发送另一个通知等)。

我在Apple的Scheduling, Registering, and Handling Notifications文档中看到,他们实际上似乎有一个示例usign方法1(他们的“聊天”示例,清单2-2)。但令人惊讶的是,这种方法似乎只是坐在一个连续的循环中进行轮询,没有干预睡眠;在我更熟悉的平台上,这是不可取的,会烧掉CPU。

因此,我的问题的子部分基本上是: - 方法2是否可行(或者必须 UILocalNotification始终会对用户造成明显的警报,这不是我想要的),如果是这样,建议的方法是什么? - 如果要做到这一点的方法是方法1,那么Apple的“聊天”示例是坐在一个连续的循环中实际上是好的(例如,iOS配给CPU以使这不是问题),如果不是这样的话iOS告诉后台进程“睡眠时间为X秒/分钟”?如果Apple的连续循环无论出于何种原因都可以,那么轮询之间的时间间隔是什么呢?

N.B。我很欣赏能够在后台运行本质上是iOS 4的功能。我不介意我的应用程序是否只能在iOS 4中运行。

2 个答案:

答案 0 :(得分:14)

iOS4的多任务处理功能不包含您想要做的事情。只允许少数类型的应用程序在后台运行很长一段时间(超过10分钟),而通用网络应用程序不是其中之一。

然而,一切都不会丢失。你可以做什么,以及我认为 应该 做的是使用推送通知。在您的服务器上,您链接苹果的推送通知服务,用户注册推送通知,您要么知道“有趣的数据”是什么,或者他们告诉您。当该数据可用时,您可以通过推送通知立即将其发送给用户。

它提供了更好的用户体验,您的应用不需要在后台运行。 iOS将处理推送通知的传递。如果他们在收到通知时滑动以解锁手机,您的应用就会打开,此时,您可以在应用中加载有用的信息。

您的方法1将无法长期运行,即使您设法暂停输入一段时间,这就是原因:启动后台任务运行任务的时间不超过10分钟,除非您是其中之一允许保持运行的三种类型的应用程序。 10分钟后,操作系统将暂停您。

你的方法2根本不起作用。所有本地通知都会向用户显示警报视图。

答案 1 :(得分:3)

  

假设这是可能的......

不幸的是,这是一个错误的假设(!)。

你无法使用iPhone上的“多任务处理”,因为它只允许某些类型的后台处理(GPS,VoIP,音乐)。要做你想做的事,你需要在服务器上完成工作并使用推送通知。