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;
}
使用以上兩步就可以成功的欺騙蘋果系統,咱們的程序就可以一直在后台運行。
