我想知道在应用程序处于后台时是否可以发送一些webservice调用。 skype是如何做到的?即使我按下主页按钮,我的通话也会保持连接状态。
答案 0 :(得分:34)
根据rckoenes的说法,允许应用程序在用户点击主页按钮后注册后台任务。完成这些任务的时间限制为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;
答案 1 :(得分:30)
试试这个...在后台运行应用程序的优秀代码,没有时间限制。 (我测试它是为了从网络服务下载超过600 MB的数据。)
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
}
更新::
您可以在此苹果文档Background Execution.
中找到有关多重过程的更多信息请在设备上测试。
答案 2 :(得分:2)
这取决于您尝试编码的应用程序类型。 Skype已注册为VoIP(长期运行的应用程序)应用程序,这就是为什么它可以保持"运行"虽然它是在背景上。
Apple将应用分为三个部分:
实施长期运行的任务(这是最有趣的后台应用类别,开发人员应为您的应用定义一些子类别)
因此,您需要评估您的应用在哪个类别以及您的服务操作执行的内容。也许如果您要向服务发送一些小东西,最好的方法只是在后台请求一些额外的时间来完成工作。
有关所有这些的更多信息,请访问此链接: