UIBackgroundTaskIdentifier bgTask;
判断设备是否支持后台
UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
backgroundSupported = device.multitaskingSupported;
NSLog(@"backgroundSupported[%@]",backgroundSupported ? @"YES" : @"NO");
- (void)applicationDidEnterBackground:(UIApplication *)application
NSAssert(self->bgTask == UIBackgroundTaskInvalid, nil);
self->bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{
// Synchronize the cleanup call on the main thread in case
// the task catully finished at around the same time.
dispatch_async(dispatch_get_main_queue(), ^{
if (UIBackgroundTaskInvalid != self->bgTask) {
[application endBackgroundTask:self->bgTask];
self->bgTask = UIBackgroundTaskInvalid;
}
});
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
// Do the work assoicated with the task.
do {
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
[runloop addTimer:time forMode:@"NSDefaultRunLoopMode"];
[runloop run];
} while (i>0);
// Synchronize the cleanup all on the main thread in case
// the task catully finished at around the same time.
dispatch_async(dispatch_get_main_queue(), ^{
if (UIBackgroundTaskInvalid != self->bgTask) {
[application endBackgroundTask:self->bgTask];
self->bgTask = UIBackgroundTaskInvalid;
}
});
});