在 应用的appdelegate里面的- (void)applicationDidEnterBackground:(UIApplication *)application代理方法中加上:
UIApplication *app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier taskId;
taskId = [app beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"后台任务超时被退出");
[app endBackgroundTask:taskId];
}];
if(taskId == UIBackgroundTaskInvalid)
{
return;
}
//队列中等待(类似于等待线程,个人理解)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
{
NSLog(@"后台任务据最长时限还有 %f 秒",app.backgroundTimeRemaining);
[NSThread sleepForTimeInterval:32]; //等待32秒
NSLog(@"后台任务据最长时限还有 %f 秒",app.backgroundTimeRemaining);
[app endBackgroundTask:taskId];//通知系统后台任务已处理完毕
});
}