iOS後臺運行機制

通常說來,全部程式進入背景後都還有5 秒的執行緩衝時間,有些程序能夠要求延長到10 分鐘(這些固然是由開發人員在設計與提交程式時決定和聲明);數組

所以,在你按下Home 鍵後,原本的程式就會退到背景,若是它有額外的背景執行做業,超過10 分鐘仍是會被iOS 停止;因此,仍是別擔憂了!服務器

可是,也有例外狀況,某些特殊類型的程式是被允許在背景中持續執行的,像是會持續在背景播放音樂的程序、GPS 程序、VOIP 程序、Newsstand 以及周邊配件附屬的程序,不過只要這些程序再也不執行動做,就會變成停止的程式,像是音樂撥完了、雜誌下載完了... 所以,使用者其實也不必太過留意這些程序。網絡

iOS長時間後臺運行的實現代碼app

一、檢查設備是否支持多任務框架

Apple出於性能的考慮,並非全部的iOS設備都支持多任務,好比iPhone 3G。若是你的應用在沒有多任務特性時會出問題,爲了保持應用的健壯性,你應該對此進行判斷並處理。你能夠經過調用UIDevice對象的multitaskingSupported屬性來獲取當前設備是否支持多任務。性能

if(![UIDevicecurrentDevice].multitaskingSupported)  spa

{  設計

//不支持多任務時應作的處理  視頻

}對象

一般,當用戶按一下Home鍵,當前應用就會被進入後臺,應用處在後臺運行狀態一小段時間後,就會進入掛起(suspend)狀態,此時應用不會再執行任何代碼。若是系統在運行其餘應用時內存資源不足,這個掛起的應用甚至有可能被系統退出,釋放內存以供活動的應用使用。只有當用戶再次運行此應用,應用纔會從掛起狀態喚醒,代碼得以繼續執行。這就是iOS4帶來的基本的多任務特性,這個特性是通常應用默認支持的,就是說你的應用不須要任何修改就能支持基本多任務特性。

二、基本多任務特性

既然是多任務你應該會在應用進入後臺時作一些處理,好比暫停一些界面的定時刷新或網絡請求。同時,或者你會在程序進入前臺時執行一些恢復操做。在你的應用的application delegate裏有2個消息用於處理這些消息:

- (void)applicationDidEnterBackground:(UIApplication*)application   

{  //進入後臺時要進行的處理  

}  

- (void)applicationWillEnterForeground:(UIApplication*)application  

{  //進入前臺時要進行的處理  

}  

 也許你須要更多的多任務特性,好比後臺播放音樂或者是後臺進行GPS跟蹤。這會是下面介紹的內容。固然你也許不會都在application delegate處理全部的事情。若是你要在其餘對象中處理,那麼你就須要註冊系統通知了,這兩個通知分別是UIApplicationDidEnterBackgroundNotification和UIApplicationWillEnterForegroundNotification。

三、聲明你須要的後臺任務

在Info.plist中添加UIBackgroundModes鍵值,它包含一個或多個string的值,包括:

audio:在後臺提供聲音播放功能,包括音頻流和播放視頻時的聲音

location:在後臺能夠保持用戶的位置信息

voip:在後臺使用VOIP功能

前面的每一個value讓系統知道你的應用程序應該在適當的時候被喚醒。例如,一個應用程序,開始播放音樂,而後移動到後臺仍然須要執行時間,以填補音頻輸出緩衝區。添加audio鍵用來告訴系統框架,須要繼續播放音頻,而且能夠在合適的時間間隔下回調應用程序;若是應用程序不包括此項,任何音頻播放在移到後臺後將中止運行。

除了添加鍵值的方法,IOS還提供了兩種途徑使應用程序在後臺工做:

Task completion—應用程序能夠向系統申請額外的時間去完成給定的任務

Local notifications—應用程序能夠預先安排時間執行local notifications 傳遞

四、後臺播放音樂

一般,通常應用在進入後臺時,任何聲音就將會中止。這也許不是咱們所想要的。要想讓本身的應用支持後臺播放,首先要修改應用的Info.plist文件,你須要在Info.plist文件中添加UIBackgroundModes字段,該字段的值是應用支持的全部後臺模式,是一個數值類型。目前此數組能夠包含「audio」、「location」和「voip」這三個字符串常量,若是要支持後臺音樂播放,你就須要包含「audio」,其他兩個會將在後面講到。

同時,你也應該設置一下應用程序的Audio Sesstion。這個是必需的,若是不設置Audio Sesstion,應用就可能進入後臺時Audio Sesstion失活而中止播放。通常須要這麼設置就能夠了:

  [[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlaybackerror:nil];  

五、後臺GPS跟蹤

和後臺播放音樂相似,若要支持後臺GPS跟蹤,你就須要在Info.plist文件中UIBackgroundModes字段對應的數組中增長「location」字符串。

六、後臺voip支持

因爲voip應用須要一個長鏈接到服務器,爲了讓這類應用能正常工做,iOS中加入後臺voip支持特性。爲支持這一特性,須要在Info.plist文件中UIBackgroundModes字段對應的數組中增長「voip」字符串。

此外你仍然須要配置一下你的網絡鏈接,以便支持後臺鏈接。iOS提供的網絡鏈接庫有幾種,下面一一說明:

a、若是你使用的是NSStream,如NSInputStream或NSOutputStream,須要調用setProperty:forKey:將Key爲NSStreamNetworkServiceType的value設置爲
NSStreamNetworkServiceTypeVoIP;

b、若是你使用NSURLRequest,須要調用setNetworkServiceType:將網絡類型設置爲NSURLNetworkServiceTypeVoIP;

c、若是你使用CFStream,如CFReadStreamRef或CFWriteStreamRef,須要調用CFReadStreamSetProperty或CFWriteStreamSetProperty將

kCFStreamNetworkServiceType屬性設置爲kCFStreamNetworkServiceTypeVoIP。

相關文章
相關標籤/搜索