0

我正在编写一个 iPhone 应用程序,除其他外,它应该每分钟自动与服务器同步。我可以使应用程序同步,但我无法弄清楚如何在后台跟踪时间(当应用程序最重要时)并自动同步。

我从来没有用多线程编程做过任何复杂的事情,所以我对它还是很陌生。

有谁知道如何做到这一点?或者至少是一个很好的起点?

4

3 回答 3

0

要设置重复同步调用,您需要使用重复的 NSTimer 实例。您可以在 Apple 的Using Timers Guide中找到设置 NSTimer 所需的所有示例代码。

您可能希望通过 dispatch_async 使用 dispatch_queue 以防止它阻塞 UI。或者,如果您使用的是 ASIHTTPRequest 网络库,它将自动使用 NSOperationQueues 进行网络操作。如果没有,你必须自己做。

我强烈建议您观看 2010/2011 年的一些 Grand Central Dispatch 和 Blocks WWDC 会议视频(我假设您是注册开发人员)。这个话题比一个问题大,你需要了解使用 GCD 的微妙之处。不过需要注意的一件事:如果您的同步过程以应用 UI 更新结束,您必须通过主线程执行此操作。您需要使用 main_queue 通过 dispatch_async 调用 UI 更新方法。会议视频将解释这一点。

最后,正如其他人所提到的,每分钟访问服务器可能会导致功耗。即使你不“同步”,上网这个简单的动作也意味着 iPhone 每次都必须开启 3G 收音机。只是需要注意的事情。

于 2012-06-26T21:58:14.493 回答
0

您将使用的方法是-(void)applicationDidEnterBackground:(UIApplication *) application

一旦应用程序进入后台,您将把所有代码放在那里。

如果您每分钟都在检查服务器,我认为这在 iPhone 上是不可能的,但有一种方法可以进行推送消息。

这是关于推送消息的教程http://mobiforge.com/developing/story/programming-apple-push-notification-services

这里也是 devolper 库http://developer.apple.com/library/ios/#DOCUMENTATION/NetworkingInternet/Conceptual/RemoteNotificationsPG/ProvisioningDevelopment/ProvisioningDevelopment.html

您可以使用推送通知来提醒用户应用程序中有新内容,一旦他们返回应用程序,它就会检查并从服务器获取任何内容。

希望有帮助

于 2012-06-26T17:50:39.930 回答
0
  1. 如果您尝试每分钟同步一次应用程序,那么这将使应用程序变慢并耗尽电池电量。您可以做什么,您可以检查是否更改了某些配置,然后再同步应用程序。

  2. 对于这些东西,您可能可以在某些配置更改时使用后台线程来执行任务。

  3. 您需要考虑应用退出时的场景,在applicationDidEnterBackground方法中对此进行特殊处理。

于 2012-06-26T17:46:45.903 回答