Search code examples
iosobjective-cweb-servicesbackground-process

iOS application executing tasks in background


I was wondering if I could send some webservice calls while my application is in the background. How does skype do it? Even if I press the home button my call stays connected.


Solution

  • Building on what rckoenes stated, applications are allowed to register background tasks to be completed after the user hits the home button. There is a time limit of 10 or 15 minutes for these tasks to complete. Again, you can register a task to complete immediately after the user hits home, this does NOT allow you to execute code say an hour after they exit the app.

    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;
        });
    

    UPDATE: if your app supports versions of iOS previous to iOs 4, you should also check to ensure that multitasking is supported before registering a background task. Use something along the lines of:

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