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;

}

 使用以上兩步就可以成功的欺騙蘋果系統,咱們的程序就可以一直在后台運行。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM