代码之家  ›  专栏  ›  技术社区  ›  Neil Coffey

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

  •  17
  • Neil Coffey  · 技术社区  · 14 年前

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

    现在,从我目前的阅读来看(我是一个经验丰富的程序员,但对iOS还不熟悉),我认为有两种可能的方法可以做到这一点:

    • 方法1:在applicationIdentiterBackground:中,启动一个执行定期轮询的后台任务;
    • 方法2:向用户发送一个不带可见文本的UILocalNotification,但它只是用来在X分钟内唤醒应用程序进行轮询(然后为下一个tim等发送另一个通知)。

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

    所以我的问题主要是: -方法2是否可行(或 UILocalNotification总是对用户发出可见的警报,这不是我想要的),如果是,建议这样做吗? -如果这是方法1,那么苹果公司的“聊天”例子坐在一个连续的循环中是否真的可以(例如,iOS是否对CPU进行了定额,这样就不成问题了),如果不是,iOS告诉后台进程“睡眠X秒/分钟”的方法是什么?如果苹果的连续循环不管出于什么原因都是可以的,那么如何计时两次投票之间的间隔呢?

    N、 B.我很感激能够在后台运行本质上是iOS4的一个特性。我不介意我的应用程序是否只能在iOS4中运行。

    2 回复  |  直到 14 年前
        1
  •  14
  •   jer    14 年前

    你想做的,不在iOS4的多任务特性中。只有少数几种类型的应用程序允许在后台长时间运行(超过10分钟),通用网络应用程序不在其中。

    应该

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

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

        2
  •  3
  •   Stephen Darlington    14 年前

    假设这是可能的。。。

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