iOS 后台任务处理(多任务)

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值