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

Qam*_*man 25 web-services objective-c background-process ios

当我的应用程序在后台时,我想知道是否可以发送一些webservice调用.skype是如何做到的?即使我按下主页按钮,我的通话也保持连接状态.

Nat*_*nes 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;
    });
Run Code Online (Sandbox Code Playgroud)

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

UIDevice* device = [UIDevice currentDevice];

BOOL backgroundSupported = NO;

if ([device respondsToSelector:@selector(isMultitaskingSupported)])

   backgroundSupported = device.multitaskingSupported;
Run Code Online (Sandbox Code Playgroud)


Gag*_*iOS 30

试试这个...在后台运行应用程序的优秀代码,没有时间限制.(我测试它是为了从网络服务下载超过600 MB的数据.)

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

更新::

您可以在此Apple doc 背景执行中找到有关多冲程的更多信息.

请在设备上测试.

  • 我正在使用它,但10分钟后任务结束. (5认同)
  • 如果我实现这个来上传数据到服务器.苹果会拒绝我的应用吗? (2认同)