iOS后臺機(jī)制簡解

1.iOS其實(shí)是偽后臺

為什么說iOS是偽后臺?首先需要了解一下iOS中的后臺進(jìn)程到底是怎么回事。iOS中所謂的“后臺駐留”并不是指執(zhí)行中的程序,而是指最近使用過的程序奈嘿。當(dāng)我們是一個進(jìn)程進(jìn)入到后臺的時候,可以想象成是Command+Tab鍵盤吞加。

一般來說裙犹,當(dāng)把一個app退到后臺的時候都會有5s的時間執(zhí)行緩沖,有些程序可以要求達(dá)到10分鐘(這個是需要開發(fā)人員來決定的)衔憨,因此在按下Home鍵之后叶圃,本來的程序就會退到后臺中去,最多10分鐘之后還是會被終止的巫财,這當(dāng)然和蘋果的后臺管理機(jī)制有關(guān)盗似。

2.iOS多任務(wù)

自從出現(xiàn)操作系統(tǒng)以來就沒有多任務(wù),就跟多線程一樣平项,無非是CPU在極短的時間里在多個進(jìn)程之間運(yùn)作罷了。而單任務(wù)是當(dāng)前的進(jìn)程獨(dú)享資源悍及。簡單來說闽瓢,iOS4 之后APP的類型可以分為三種:

1. 保存現(xiàn)場。

即:按下Home鍵10秒內(nèi)直接殺死進(jìn)程心赶,并釋放內(nèi)存扣讼。一般說來,所有程序進(jìn)入背景后都還有5 秒的執(zhí)行緩沖時間缨叫,有些程序可以要求延長到10 分鐘(這些當(dāng)然是由開發(fā)人員在設(shè)計與提交程式時決定和聲明)椭符;因此,在你按下Home 鍵后耻姥,本來的程式就會退到背景销钝,如果它有額外的背景執(zhí)行作業(yè),超過10 分鐘還是會被iOS 中止琐簇。

2.iOS支持的“多任務(wù)”蒸健。

即:按下Home鍵轉(zhuǎn)入多任務(wù)狀態(tài),保留在內(nèi)存中婉商,但只能系統(tǒng)允許的動作:比如GPS似忧,比如Streaming Music等等。

3.真正的桌面級別的多任務(wù)丈秩。

即:只有Safari/Mail才是真正的多任務(wù)盯捌,蘋果嫡系大都都不是。這個級別的app在后臺是沒有任何限制動作蘑秽。(對于無限制動作的程序饺著,一是會在用戶無察覺的情況下耗光電力箫攀,二是會有安全上面的問題)。

3.設(shè)備多任務(wù)

Apple在出于性能的考慮上瓶籽,之前并不是所有的設(shè)備都是支持多任務(wù)的匠童。通常,當(dāng)用戶按一下Home鍵的時候塑顺,當(dāng)前應(yīng)用就會進(jìn)入后臺汤求,應(yīng)用在進(jìn)入后臺之后就會被suspend(掛起)狀態(tài),此時不再去執(zhí)行任何的代碼严拒,如果系統(tǒng)在運(yùn)行其他程序出現(xiàn)內(nèi)存警告的時候就會優(yōu)先將先suspend的程序先退出系統(tǒng)扬绪,只有當(dāng)用戶和再次啟動APP的時候才會從掛起的狀態(tài)變成喚醒的狀態(tài),這個是基本的多任務(wù)特新裤唠。

那么既然是多任務(wù)應(yīng)該會在應(yīng)用進(jìn)入后臺時做一些處理挤牛,比如暫停界面的定時刷新或者是網(wǎng)絡(luò)請求,同時种蘸,或者需要在程序進(jìn)入前臺時候執(zhí)行一些恢復(fù)操作墓赴,在應(yīng)用的Appdelegate中有兩個方法用于處理這些消息:

(void)applicationDidEnterBackground:(UIApplication*)application

{

//進(jìn)入后臺時要進(jìn)行的處理

}

-?(void)applicationWillEnterForeground:(UIApplication*)application

{

//進(jìn)入前臺時要進(jìn)行的處理

}

如果是在其他的對象中處理后臺消息的時候,需要使用到系統(tǒng)的兩個通知UIApplicationDidEnterBackgroundNotification和UIApplicationWillEnterForegroundNotification航瞭。

那么在開發(fā)中我們往往是需要在后臺做一些事情的诫硕,比如說GPS、播放音樂等刊侯。那么這個時候需要我們手動去聲明后臺的任務(wù):

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

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

location:在后臺可以保持用戶的位置信息

voip:在后臺使用VOIP功能

前面的每一個value讓系統(tǒng)知道我們的應(yīng)用程序應(yīng)當(dāng)要在適當(dāng)?shù)臅r候被喚醒藕届,比如說一個應(yīng)用程序在后臺的時候也需要播放音樂,添加audio鍵用來告訴系統(tǒng)框架亭饵,需要繼續(xù)播放音頻休偶,并且可以在合適的時間間隔下回調(diào)應(yīng)用程序;如果應(yīng)用程序不包括此項冬骚,任何音頻播放在移到后臺后將停止運(yùn)行椅贱。

后臺voip支持

由于voip應(yīng)用需要一個長連接到服務(wù)器,為了讓這類應(yīng)用能正常工作只冻,iOS中加入后臺voip支持特性庇麦。為支持這一特性,需要在Info.plist文件中UIBackgroundModes字段對應(yīng)的數(shù)組中增加“voip”字符串喜德。

此外你仍然需要配置一下你的網(wǎng)絡(luò)連接山橄,以便支持后臺連接。iOS提供的網(wǎng)絡(luò)連接庫有幾種舍悯,下面一一說明:

a航棱、如果你使用的是NSStream睡雇,如NSInputStream或NSOutputStream,需要調(diào)用setProperty:forKey:將Key為NSStreamNetworkServiceType的value設(shè)置為

NSStreamNetworkServiceTypeVoIP饮醇;

b它抱、如果你使用NSURLRequest,需要調(diào)用setNetworkServiceType:將網(wǎng)絡(luò)類型設(shè)置為NSURLNetworkServiceTypeVoIP朴艰;

c观蓄、如果你使用CFStream,如CFReadStreamRef或CFWriteStreamRef祠墅,需要調(diào)用CFReadStreamSetProperty或CFWriteStreamSetProperty將kCFStreamNetworkServiceType屬性設(shè)置為kCFStreamNetworkServiceTypeVoIP侮穿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市毁嗦,隨后出現(xiàn)的幾起案子亲茅,更是在濱河造成了極大的恐慌,老刑警劉巖狗准,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件克锣,死亡現(xiàn)場離奇詭異,居然都是意外死亡腔长,警方通過查閱死者的電腦和手機(jī)娶耍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饼酿,“玉大人,你說我怎么就攤上這事胚膊」世” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵紊婉,是天一觀的道長药版。 經(jīng)常有香客問我,道長喻犁,這世上最難降的妖魔是什么槽片? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮肢础,結(jié)果婚禮上还栓,老公的妹妹穿的比我還像新娘。我一直安慰自己传轰,他們只是感情好剩盒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慨蛙,像睡著了一般辽聊。 火紅的嫁衣襯著肌膚如雪纪挎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天跟匆,我揣著相機(jī)與錄音异袄,去河邊找鬼。 笑死玛臂,一個胖子當(dāng)著我的面吹牛烤蜕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播垢揩,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玖绿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叁巨?” 一聲冷哼從身側(cè)響起斑匪,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锋勺,沒想到半個月后蚀瘸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庶橱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年贮勃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苏章。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡寂嘉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枫绅,到底是詐尸還是另有隱情泉孩,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布并淋,位于F島的核電站寓搬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏县耽。R本人自食惡果不足惜句喷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兔毙。 院中可真熱鬧唾琼,春花似錦、人聲如沸瞒御。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至趾唱,卻和暖如春涌乳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甜癞。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工夕晓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悠咱。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓蒸辆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親析既。 傳聞我的和親對象是個殘疾皇子躬贡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 蘋果官網(wǎng)地址 Background Execution (后臺執(zhí)行)當(dāng)用于沒有-啟動應(yīng)用,系統(tǒng)移到后臺狀態(tài)眼坏。對于很...
    helinyu閱讀 7,720評論 0 9
  • IOS開發(fā)之----詳解在IOS后臺執(zhí)行 文一 我從蘋果文檔中得知拂玻,一般的應(yīng)用在進(jìn)入后臺的時候可以獲取一定時間來...
    dongfang閱讀 1,383評論 0 7
  • 很多使用iphone的孩紙,可能并不了解iphone的后臺運(yùn)行機(jī)制宰译。今天轉(zhuǎn)載一篇網(wǎng)友的文章檐蚜,來掃盲一下。 標(biāo)注來源...
    銀千特iv閱讀 11,347評論 2 10
  • 可能骨子里就是享受孤獨(dú)吧 清晨沿侈,總是會問自己 你今天還難受嗎 準(zhǔn)備怎么度過新的一天闯第。你的身體你的思想會回復(fù)你,需要...
    路邊撿的我閱讀 173評論 0 0
  • “每一道不動聲色愈合的傷痕缀拭,都可以稱作是英雄的佐證咳短。” 換口罩之際蛛淋,我再次審視了我的臉诲泌,一直以來,我都是帶著口罩示...
    Whale小諾閱讀 326評論 0 1