美文网首页
iOS开启后台任务

iOS开启后台任务

作者: winsonGali | 来源:发表于2019-06-10 14:25 被阅读0次
@interface AppDelegate ()   {
    NSTimer *_timer;
    NSInteger _remainSeconds;
    CGFloat _timeInterval;
}
@property(nonatomic, assign)UIBackgroundTaskIdentifier taskIdentifier;
@end

@implementation AppDelegate

- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSLog(@"进入后台");
    [self beginBackgroundUpdateTask];
    //获取后台剩余时间
    NSTimeInterval remainTime = [[UIApplication sharedApplication] backgroundTimeRemaining];
    //开启后台任务
    self.taskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        NSLog(@"后台任务即将终止");
    }];
    //10分钟
    _remainSeconds = 10 * 60;
    //开启新的后台任务时间间隔,留点时间在后台结束之前调用,保证成功率
    _timeInterval = ceil(remainTime - 5);
    //开启定时器
    _timer = [NSTimer scheduledTimerWithTimeInterval:_timeInterval target:self selector:@selector(doTimer:) userInfo:nil repeats:YES];
}

- (void)doTimer:(NSTimer *)sender {
    NSTimeInterval remainTime = [[UIApplication sharedApplication] backgroundTimeRemaining];
    _remainSeconds -= _timeInterval;
    if (remainTime <= 0) {
        self.taskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
            [self endBackgroundUpdateask];
        }];
    }
    
    if (_remainSeconds <= 0) {
        [_timer invalidate];
        [self endBackgroundUpdateask];
    }
}

- (void)beginBackgroundUpdateTask{
    self.taskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        NSTimeInterval remainTime = [[UIApplication sharedApplication] backgroundTimeRemaining];
        [self endBackgroundUpdateask];
    }];
}

- (void)endBackgroundUpdateask{
    [[UIApplication sharedApplication] endBackgroundTask:self.taskIdentifier];
    self.taskIdentifier = UIBackgroundTaskInvalid;
}

@end

相关文章

网友评论

      本文标题:iOS开启后台任务

      本文链接:https://www.haomeiwen.com/subject/khdzxctx.html