iOS应用程序在后台执行任务

我想知道如果我可以发送一些web服务调用,而我的应用程序在后台。 Skype如何做到这一点? 即使我按主页button我的电话保持连接。

根据rckoenes的说法,应用程序被允许在用户点击主页button后注册后台任务。 这些任务有10到15分钟的时间限制。 再次,你可以注册一个任务,在用户点击回家后立即完成,这不允许你在退出应用程序一小时后执行代码。

UIApplication* app = [UIApplication sharedApplication]; task = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:task]; task = UIBackgroundTaskInvalid; }]; // Start the long-running task and return immediately. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Do the work associated with the task. NSLog(@"Started background task timeremaining = %f", [app backgroundTimeRemaining]); if (connectedToNetwork) { // do work son... } [app endBackgroundTask:task]; task = UIBackgroundTaskInvalid; }); 

更新:如果您的应用程序支持iOs 4之前的iOS版本,则还应该检查以确保在注册后台任务之前支持多任务处理。 使用以下方面的内容:

 UIDevice* device = [UIDevice currentDevice]; BOOL backgroundSupported = NO; if ([device respondsToSelector:@selector(isMultitaskingSupported)]) backgroundSupported = device.multitaskingSupported; 

试试这个…在没有时间限制的背景下运行应用程序的优秀代码。 (我testing了从networking服务下载超过600 MB的数据。)

 - (void)applicationDidEnterBackground:(UIApplication *)application { UIApplication *app = [UIApplication sharedApplication]; UIBackgroundTaskIdentifier bgTask; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:bgTask]; }]; } 

更新::

你可以在这个苹果doc 后台执行中find更多关于多重检测的信息。

请在设备上testing。

这取决于你想要编写什么样的应用程序。 Skype注册为VoIP(长时间运行的应用程序)应用程序,这就是为什么它可以保持“运行”,虽然它在后台。

苹果将​​应用程序分为三部分:

  • 执行有限长度任务(您可以在有限的时间内运行任务)
  • 在后台下载内容(当应用程序再次激活时,您可以下载内容以呈现给用户)
  • 实现长时间运行的任务(这是最有趣的后台应用程序类别,开发人员应该为您的应用程序定义一些子类别)

    • 在后台播放可听内容的应用,例如音乐播放器应用
    • 在后台录制audio内容的应用程序
    • 随时向用户通知其位置的应用,例如导航应用
    • 支持networking电话(VoIP)的应用程序(SKYPE在这里)
    • 需要定期下载和处理新内容的应用程序
    • 从外部附件获得定期更新的应用程序

所以,您需要评估您的应用程序在哪个类别以及您的服务操作执行的内容。 也许如果你正在向服务发送一些小的东西,最好的方法是只需要在背景上花一些额外的时间来完成这项工作。

有关这一切的更多信息,请访问以下链接:

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html