手机进入后台,会发生以下三种情况
一般来说,没有进行过任何设置的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);
}];
}