iO后臺模式開發

1. 后臺駐留

iOS 中所謂的「后臺駐留」并不是指「執行中的程序」,而是「最近使用過的程序」
Apple 的知識庫文章解釋:
  • 按兩下主畫面按鈕后,顯示的是「最近用過的應用程序」,所以別把它想成Mac OS X 中的Command + Tab 鍵所顯示的切換程序列。

  • 你可以試試看將iPhone 關機再開機,然后按兩下 Home 鍵,應該會發現先前那些程式還是出現在那里,因為它其實是你最近使用過的程序使用記錄,或像是瀏覽器中的瀏覽記錄。

  • 如果你一個一個去清除 "后臺駐留" 的程序,就像是一筆一筆刪除瀏覽記錄中的項目一樣,是沒有太大意義的(除非你不想讓其他人看到你曾經用過什么程式,或者想殺時間、太無聊了),也不會對電力或記憶體有什么幫助。

  • iOS 的多任務處理其實是很聰明的,系統會自動中止在背景執行的程序,在有需要時,也會將被中止的程式 suspended(掛起)(注:"中止的程式"不是指關閉程序,而是指由前臺轉向后臺的程序,程序在后臺并不真正運行,不要和關閉程序混淆了) 從內存中移除。因此,iOS 裝置的使用者根本就不需要擔心怎么管理這些執行中或不在執行中的程序。

所以點擊兩下Home之后顯示的是記錄,并且這些記錄是有的是掛起狀態,也有應用因為內存吃緊而被關閉,當你將應用劃出記錄的時候,其實做的是兩個操作。
  • 清除記錄

  • 完全關閉應用(關閉進程)

2.掛起

一般說來,所有程式進入背景后都還有1-5秒的執行緩沖時間(視內存壓力而決定),有些程序可以要求延長到10 分鐘(這些當然是由開發人員在設計與提交程式時決定和聲明),因此,在你按下 Home 鍵后,本來的程式就會退到后臺,如果它有額外的后臺執行作業,超過10分鐘還是會被 iOS 中止,但是,也有例外情況,某些特殊類型的程式是被容許在背景中持續執行的,像是會持續在背景播放音樂的程序、GPS 程序、VOIP 程序、Newsstand 以及周邊配件附屬的程序,不過只要這些程序不再執行動作,就會變成中止的程式,像是音樂撥完了、雜志下載完了。
既然是多任務你應該會在應用進入后臺時做一些處理,比如暫停一些界面的定時刷新或網絡請求。同時,或者你會在程序進入前臺時執行一些恢復操作。
  • <p> 在你的應用的application delegate里有2個消息用于處理這些消息:</p>
- (void)applicationDidEnterBackground:(UIApplication*)application
{
    //進入后臺時要進行的處理 
}
- (void)applicationWillEnterForeground:(UIApplication*)application  
{  
    //進入前臺時要進行的處理  
}  

3.延長程序掛起的時間(最多十分鐘)

調用UIApplication的
eginBackgroundTaskWithExpirationHandler

方法,可以讓 app 最多有10分鐘的時間在后臺長久運行

  • <p> 首先:聲明一個實例 <p>
@interface AppDelegate ()  
{  
    //用來保存后臺運行任務的標示符  
     UIBackgroundTaskIdentifier backgroundTask;  
}

</code> </pre>

  • <p>然后實現代碼 </p>
- (void)applicationDidEnterBackground:(UIApplication *)application {
    //通知系統, 我們需要后臺繼續執行一些邏輯
    backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
        //超過系統規定的后臺運行時間, 則暫停后臺邏輯
        [application endBackgroundTask:backgroundTask];
        backgroundTask = UIBackgroundTaskInvalid;
    }];
    //判斷如果申請失敗了, 返回
    if (backgroundTask == UIBackgroundTaskInvalid) {
        NSLog(@"beginground error");
        return;
    }
    //已經成功向系統爭取了一些后臺運行時間, 實現一些邏輯, 如網絡處理
    //some code
}
  • <p> 處理完之后掛起線程 </p>
[[UIApplication sharedApplication] endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid;

4.無限后臺運行

首先聲明你需要的后臺任務
在Info.plist中添加UIBackgroundModes鍵值,它包含一個或多個string的值,包括:
  • audio:在后臺提供聲音播放功能,包括音頻流和播放視頻時的聲音
  • location:在后臺可以保持用戶的位置信息
  • voip:在后臺使用VOIP功能

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

  • <p> 下面以后臺播放音樂為例:</p>

<p>在Supporting Files目錄下的【02 應用進入后臺繼續播放音樂-Info.plist】 增加一項【Required background modes】 值為【App plays audio or streams audio/video using AirPlay】<p>
iamge
// 后臺播放, 
AVAudioSession * session = [AVAudioSession sharedInstance];
// 類型是:播放和錄音
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
// 而且要激活 音頻會話
[session setActive:YES error:nil];

最后貼出官方文檔地址:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容