美文网首页iOS 应用层系统层知识
后台运行之UIBackgroundTaskIdentifier

后台运行之UIBackgroundTaskIdentifier

作者: 被吹落的风 | 来源:发表于2018-10-29 14:27 被阅读208次

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

    • 一般来说,没有进行过任何设置的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);
        }];
    }
    

    相关文章

      网友评论

        本文标题:后台运行之UIBackgroundTaskIdentifier

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