12.2后台运行之UIBackgroundTaskIdentifier

手机进入后台,会发生以下三种情况

一般来说,没有进行过任何设置的app,默认退到后台极短的几秒后就变成挂起状态
当设置了UIBackgroundTaskIdentifier后台任务标记时,程序后台保活会延迟到三分钟左右
再设置后台持续定位,或者持续voip播放模式后,会长时间保活,这个时间从原理上可以无限(参考网易、酷狗等音乐播放器),我自己用的后台持续定位模式所持续的时间基本都在2小时以上

下面讲解第二种情况
//app进入后台后保持运行

- (void)beginTask
{
    _backIden = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        //如果在系统规定时间3分钟内任务还没有完成,在时间到之前会调用到这个方法
        [self endBack]; 
    }];
}

//结束后台运行,让app挂起

- (void)endBack
{
    //切记endBackgroundTask要和beginBackgroundTaskWithExpirationHandler成对出现
    [[UIApplication sharedApplication] endBackgroundTask:_backIden];
    _backIden = UIBackgroundTaskInvalid;
}

//示例

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [self beginTask];
    
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    
    self.number = 0;
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.f repeats:YES block:^(NSTimer * _Nonnull timer) {
        self.number++;
        [UIApplication sharedApplication].applicationIconBadgeNumber = self.number;
        if (self.number == 9)
        {
            [self.timer invalidate];
        }
        
        NSLog(@"%@==%ld ",[NSDate date],self.number);
    }];
}

你可能感兴趣的:(12.2后台运行之UIBackgroundTaskIdentifier)