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);
    }];
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在日常的工作开发中,有时会遇到需要在后台持续运行的需求。对于这个需求,安卓实现起来比较简单,而iOS来说就比较复杂...
    moxacist阅读 33,849评论 23 38
  • 文档app在后台时会被暂停,暂停的apps会提高电池的使用寿命,并且会让系统将重要的系统资源投入到引起用户注意的前...
    zziazm阅读 10,257评论 0 5
  • 前言 对于APP的前后台运行情况的了解,有助于我们在实际开发中规避一些问题,以及采取稳妥的方法处理和解决问题,是很...
    進无尽阅读 8,635评论 7 12
  • 文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时...
    Kloar阅读 5,445评论 0 1
  • 天天忙忙忙,其实我也知道这种环境对你的学习不负责任,是我们工作给你带来了坏习惯,我也想给你安静的学习环境,但...
    小雨儿的妈妈阅读 1,049评论 0 0

友情链接更多精彩内容