当应用退到后台或者锁屏状态下,过段时间程序就会被挂起,这时我们就需要开启一个后台服务来防止后台程序挂起,我是通过一个定时器来开启服务的。直接上代码。
step1: 首先开启后台模式中的音频,如下图
step2: 在AppDelegate.m文件中导入头文件 #import <AVFoundation/AVFoundation.h>
#import <AVFoundation/AVFoundation.h>
@interface AppDelegate ()
@property (strong, nonatomic) NSTimer *backgroundTime;
@property (nonatomic, assign) UIBackgroundTaskIdentifier bgTask;
@end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
//程序失去焦点的时候 开启后台服务
[self openServiceWhenBack];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
//当程序进入前台的时候结束后台任务
[self endBackgroundTask];
}
#pragma mark ---------------------------- 开启一个后台任务
- (void)openServiceWhenBack{
UIApplication* app = [UIApplication sharedApplication];
self.bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
}];
//开启定时器 不断向系统请求后台任务执行的时间
self.backgroundTime = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(applyForMoreTime) userInfo:nil repeats:YES];
[self.backgroundTime fire];
}
//申请后台任务
-(void)applyForMoreTime {
//如果系统给的剩余时间小于60秒 就终止当前的后台任务,再重新初始化一个后台任务,重新让系统分配时间,这样一直循环下去,保持APP在后台一直处于active状态。
if ([UIApplication sharedApplication].backgroundTimeRemaining < 60) {
[[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
}];
}
}
#pragma mark ---------------------------- 结束一个后台任务
- (void)endBackgroundTask {
UIApplication *app = [UIApplication sharedApplication];
[app endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
if (self.backgroundTime) {
// 结束计时
[self.backgroundTime invalidate];
self.backgroundTime = nil;
}
}
以上是开启后台服务的操作,这样就能避免程序被挂起,亲测有效。
详情请查看Demo,如果您觉得对您有帮助的话,别忘了Star一下哟,如果有什么问题请指正。