我想知道如果我的应用程序在后台运行时是否可以发送一些web服务调用。 Skype如何做到这一点?即使我按下主页按钮,我的电话仍保持连接状态。iOS应用程序在后台执行任务
回答
根据rckoenes的说法,允许应用程序在用户点击home按钮后注册后台任务。完成这些任务需要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版本以前的为iOS 4,您也应该检查,以确保注册后台任务之前多任务支持。使用的东西沿线︰
UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
backgroundSupported = device.multitaskingSupported;
从iOS 7开始,后台执行时间从10分钟减少到3分钟。 – user3847320 2016-04-19 19:51:31
@ user3847320,任何文档请... – 2017-08-09 13:21:43
@GaneshGuturi没有直接的文档,并且苹果明确指出背景时间是基于许多变量机会性分配的。跟踪和错误(通过记录UIApplication.shared.backgroundTimeRemaining)指示3分钟的执行时间。这当然可以根据苹果的判断改变。 – user3847320 2017-08-10 14:30:34
试试这个...在后台运行应用程序的优秀代码没有时间限制。 (我测试了从Web服务下载超过600点MB的数据。)
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
}
更新::
,你可以找到关于这个苹果文档Background Execution.
multitaksing更多信息,请在设备上测试。
这取决于您想要编写什么样的应用程序。 Skype已注册为VoIP(长时间运行的应用)应用,这就是为什么它可以保持“运行”,尽管它在后台。
苹果在三个分离的应用程序:
- 执行有限长度的任务(你可以运行的时间有限的任务)
- 在后台下载内容(你可以下载的内容提交给当应用程序反复活跃成为
实现长时间运行的任务(这是最有趣的背景的用户)应用程式类别,与开发者应该定义为你的应用中的一些子类)
-
个
- 应用程式播放音频内容给用户,同时在后台运行,如音乐播放器应用程序
- 应用该记录的音频内容,而在后台
- 应用程序,使用户了解其位置的时刻,这样的作为导航应用
- 应用,支持互联网语音协议(VoIP)(SKYPE是这里)
- 应用程序需要下载和处理新的内容,从外部附件接收定期更新定期
- 应用
因此,您需要评估您的应用程序在哪个类别以及您的服务操作执行的内容。也许如果你正在向服务发送一些小的东西,最好的方法只是在后台请求一些额外的时间来完成这项工作。所有的这
更多信息此链接:
- 1. 在iPhone上的应用程序中执行后台任务
- 2. 当应用程序终止时执行后台任务
- 3. 在后台运行iOS应用程序
- 4. 使用iOS应用程序在后台执行网络请求
- 5. iOS应用程序可以在后台执行什么操作?
- 6. iOS应用程序在后台执行期间死机
- 7. ios后台任务 - 解释执行顺序?
- 8. 如何在ios 4.0中执行多任务应用程序
- 9. iOS企业应用程序 - AsiHTTPRequest的长期后台任务
- 10. 如果iOs应用程序已关闭,则后台任务
- 11. iOS:在后台运行应用程序作为服务
- 12. 在应用程序进入暂停状态之前执行后台任务
- 13. 在UWP应用程序中执行后台任务时的问题
- 14. 在iPhone应用程序的后台运行任务
- 15. iPhone - 如何在后台执行任务?
- 16. 如何在后台执行Android任务
- 17. JavaFX在后台执行任务
- 18. 在后台继续执行任务
- 19. IOS - 在后台执行有限长任务
- 20. 执行在后台和主线程ios
- 21. 如何通过后台服务来执行应用程序?
- 22. 检查应用程序是否从后台任务运行
- 23. Windows运行时应用程序的后台任务
- 24. 在iOS中定期在后台线程中运行任务
- 25. iOS - 如何在应用程序进入后台之前完成任务
- 26. iOS上的后台任务
- 27. 如何让iOS应用程序执行一些代码,即使应用程序没有在后台运行?
- 28. 应用程序在后台执行任务(收到远程通知后),但未完成完成
- 29. 在后台运行的服务或控制台应用程序?
- 30. ios应用程序,当应用程序在后台运行加速度计
如果你读的背景苹果的文件运行,你会看到你只允许运行你的应用程序在后台,如果,你是播放音频,监控位置或您的应用程序是VOIP客户端。如果你的应用程序不属于上述类别之一,那么你运气不好。 http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html – rckoenes 2011-03-16 10:08:54
@rckoenes这是不正确的。有限的任务可以获得*一些* CPU时间*(通常在10分钟左右)*。请参阅[文档](https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html) – webo80 2016-02-17 16:23:58
@ webo80 true您可以获得一些时间,在iOS 9中它是一种方式少于10分钟。但总的来说,你可以在后台完成一些任务。 – rckoenes 2016-02-18 10:39:40