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;

}

 使用以上两步就可以成功的欺骗苹果系统,咱们的程序就可以一直在后台运行。

  

posted @ 2016-03-20 12:56  xcodes123  阅读(3307)  评论(2编辑  收藏  举报