ios后台程序持续运行方法
iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的。在后台时,程序会受到系统的很多限制,这样可以提高电池的使用和用户体验。但是有很多社交类的软件,如果因为它在后台就不能刷新到新的数据的话,那么这回影响到用户的体验,下面是将程序退到后台后可以继续运行儿不被系统清除的方法。
在appdelegate中
- (void)applicationDidEnterBackground:(UIApplication *)application{
UIBackgroundTaskIdentifier ID=[application beginBackgroundTaskWithExpirationHandler:^{
//当后台任务结束时调用
[application endBackgroundTask:ID];
} 这个函数是在程序进入后台的时候调用,我们在这个函数中先开启一个后台任务 只不过它的时间不确定, 优先级比较低 , 如果系统内存不够的话,就要被关闭了
当这一步失效后,就要使出杀手锏了,苹果系统关于后台程序的优先级有着明确的划分,如果你在播放音乐的话,那么你的优先级很高,系统一般不会清除;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
// 在真机上后台播放音乐,需要设置音频会话
AVAudioSession *session=[AVAudioSession sharedInstance]; //这是个单例模式,全局都可以使用
//设置会话类型(后台播放)
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
//激活
[session setActive:YES error:nil];
}
// 即将失去焦点的时候
- (void)applicationWillResignActive:(UIApplication *)application {
NSURL *url=[[NSBundle mainBundle]URLForResource:@"aaa.mp3" withExtension:nil]; //aaa.mp3是一首无声的音乐
AVAudioPlayer *player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
[player prepareToPlay];
//一直循环播放
player.numberOfLoops=-1;
[player play];
_player=player;
}
使用以上两步就可以成功的欺骗苹果系统,咱们的程序就可以一直在后台运行。