IOS 按下home键后APP就会suspended,但是我们又需要它继续执行某些操作的时候,IOS 有以下几种途径;
1:推送
当app进入后台的时候,给app发起推送的话,APP会暂时唤起执行某些操作,不过时间是有限的大概在3分钟.超过这个时间的换APP又会从新suspended掉,之后就不能再次唤起。
2:某些特定的多任务
如:VOIP,背景音乐,定位等
3:task completion
我们为了在app 进入后台之后执行某些任务,我们还可以主动申请额外的时间,不过也只有3分钟。
下面是退出后台执行备份的例子(整理)
- (void)applicationDidEnterBackground:(UIApplication *)application
{
__block UIBackgroundTaskIdentifier bgTask;// 后台任务标识
// 结束后台任务
void (^endBackgroundTask)() = ^(){
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
};
bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
endBackgroundTask();
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
double start_time = application.backgroundTimeRemaining;// 记录后台任务开始时间
BOOL networkAvailable = [YLSGlobalUtils isNetworkAvailable];
if(!networkAvailable){
NSLog(@"网络不可用,取消自动备份");
endBackgroundTask();
return;
}
BOOL need = [backupService checkNeedBackup];
if(!need){
NSLog(@"无需备份");
endBackgroundTask();
return;
}
[backupService doBackupProcessHandler:^(float done, float total){
// nothing to do with progress
} CompletionHandler:^(NSError* error, NSArray* statistics){
double done_time = application.backgroundTimeRemaining;
double spent_time = start_time - done_time;
NSLog(@"后台备份完成,耗时: %f秒", spent_time);
endBackgroundTask();
}];
});
}