让iOS程序一直在后台运行
1 众所周知,iOS程序退入后台以后一段时间就会被杀死。那么如何保证一个应用程序进入后台以后一直保持活跃呢??通常*常见的方法就是在后台播放一段音频(没有声音),因为AVPlayer这个类进入后台以后可以保证程序不死。
首先我们需要在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法里面实现下面几段代码:
// 设置音频会话
AVAudioSession *session = [AVAudioSession sharedInstance];
// 后台播放
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
// 单独播放一个后台程序
[session setCategory:AVAudioSessionCategorySoloAmbient error:nil];
[session setActive:YES error:nil];
2 在程序进入后台时,开启一个后台任务,时间不确定,这个优先级比较低,如果系统内存不足需要关闭应用的时候,系统首先会考虑关闭这个应用,但是总比不开启后台任务要好。
// 程序进入后台的时候调用
– (void)applicationDidEnterBackground:(UIApplication *)application {
// 开启一个后台任务,时间不确定,优先级比较低,假如系统要关闭应用,首先就考虑
UIBackgroundTaskIdentifier ID = [application beginBackgroundTaskWithExpirationHandler:^{
// 当后台任务结束的时候调用
[application endBackgroundTask:ID];
}];
// 如何提高后台任务的优先级,欺骗苹果,我们是后台播放程序
// 但是苹果会检测你的程序当时有没有播放音乐,如果没有,有可能就干掉你
// 微博:在程序即将失去焦点的时候播放静音音乐.
}
3 在程序即将不活跃的时候循环播放一段音频,是应用一直不被杀死。
// 失去焦点
– (void)applicationWillResignActive:(UIApplication *)application {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
NSURL *url = [[NSBundle mainBundle] URLForResource:@”silence.mp3″ withExtension:nil];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[player prepareToPlay];
// 无限播放
player.numberOfLoops = -1;
[player play];
_player = player;
}
4.设置后台的模式
通过上面的4步骤就可以实现应用程序一直在后台运行了。