后臺(tái)運(yùn)行并且保持程序后臺(tái)長(zhǎng)時(shí)間運(yùn)行

熟悉基礎(chǔ)

iOS 應(yīng)用程序3個(gè)狀態(tài):

不活動(dòng)-應(yīng)用程序處于前臺(tái)但不再接收事件(例如识窿,用戶在app處于活動(dòng)時(shí)鎖住了設(shè)備)换团。
后臺(tái)-app不再屏幕上顯示把还,但它仍然執(zhí)行代碼协屡。
掛起-app仍然駐留內(nèi)存但不再執(zhí)行代碼。

按下Home鍵時(shí)全谤,app從活動(dòng)狀態(tài)轉(zhuǎn)入后臺(tái)肤晓,絕大部分app通常在幾秒內(nèi)就從后臺(tái)變成了掛起。
在內(nèi)存吃緊的時(shí)候认然,iphone會(huì)首先關(guān)閉那些掛起的app补憾。

從 iOS 4 開(kāi)始,應(yīng)用就可以在退到后臺(tái)后卷员,繼續(xù)運(yùn)行一小段時(shí)間(10 分鐘)盈匾;
2.還可以把自己聲明為需要在后臺(tái)運(yùn)行,就能不限時(shí)地運(yùn)行了毕骡。
不過(guò)限制為播放音樂(lè)削饵、使用 GPS 、voip未巫、窿撬。 值得一提的是,有的應(yīng)用為了達(dá)到后臺(tái)不限時(shí)運(yùn)行的目的叙凡,在后臺(tái)播放無(wú)聲的音樂(lè)(審核不一定會(huì)被發(fā)現(xiàn))劈伴。
iOS 5 開(kāi)始又多了一種類型:下載報(bào)刊雜志。
然后 iOS 7 則可以下載各種玩意和定時(shí)抓取握爷。
iOS 7 需要注意的區(qū)別:iOS 7 以前跛璧,應(yīng)用進(jìn)入后臺(tái)繼續(xù)運(yùn)行時(shí),如果用戶鎖屏了新啼,那么 iOS 會(huì)等待應(yīng)用運(yùn)行完追城,才進(jìn)入睡眠狀態(tài)。而在 iOS 7 上师抄,系統(tǒng)會(huì)很快進(jìn)入睡眠狀態(tài)漓柑,那些后臺(tái)應(yīng)用也就暫停了。如果收到事件被喚醒(例如定時(shí)事件叨吮、推送辆布、位置更新等),后臺(tái)應(yīng)用才能繼續(xù)運(yùn)行一會(huì)茶鉴。因?yàn)樘幚磉^(guò)程變成了斷斷續(xù)續(xù)的锋玲,因此下載時(shí)也要使用 NSURLSession 來(lái)處理(即下文中的 Background Transfer Service)。

  1. 在我看來(lái)涵叮,蘋(píng)果限制 app在后臺(tái)運(yùn)行惭蹂,是為了更有效的利用硬件使用當(dāng)前的app伞插,不然,過(guò)多的app駐留后臺(tái)盾碗,對(duì)手機(jī)資源占用是一大問(wèn)題媚污。

ios7以后提供的后臺(tái)接口模式

1、Background Audio廷雅,這是后臺(tái)的音頻耗美,這個(gè)很早之前便有,也是iOS設(shè)備中用得最多的后臺(tái)應(yīng)用航缀,調(diào)用這個(gè)接口可以實(shí)現(xiàn)后臺(tái)的音樂(lè)播放商架。
2、Location Services芥玉,這是后臺(tái)的定位蛇摸,系統(tǒng)會(huì)擁有統(tǒng)一頁(yè)面進(jìn)行管理。
3灿巧、VoIP赶袄,后臺(tái)語(yǔ)音服務(wù),類似Skype通話應(yīng)用需要調(diào)用砸烦,可進(jìn)行后臺(tái)的語(yǔ)音通話弃鸦。
4、Newsstand幢痘,報(bào)刊雜志后臺(tái)自動(dòng)下載更新唬格,其能夠自動(dòng)實(shí)時(shí)更新。
5颜说、Background Task Completion购岗,這個(gè)接口早在iOS 4時(shí)候便擁有,其可以供任意類型的APP使用门粪,不過(guò)在舊系統(tǒng)中喊积,這個(gè)接口的后臺(tái)限制運(yùn)行時(shí)間僅為10分鐘,意味著當(dāng)應(yīng)用退至后臺(tái)玄妈,其后臺(tái)運(yùn)行僅能持續(xù)10分鐘便會(huì)轉(zhuǎn)至休眠狀態(tài)乾吻。iOS 7中對(duì)這個(gè)接口作出了改變,原來(lái)的為連續(xù)10分鐘拟蜻,即不論你這10分鐘內(nèi)用戶是否關(guān)閉屏幕進(jìn)入休眠狀態(tài)绎签,應(yīng)用仍然會(huì)在后臺(tái)等待10分鐘完結(jié)后推出,而新的改進(jìn)為假如遇到關(guān)閉屏幕休眠的情況酝锅,這后臺(tái)運(yùn)行的10分鐘便會(huì)跟隨一同休眠诡必,剩余的后臺(tái)時(shí)間將會(huì)留待用戶再一次喚醒設(shè)備才計(jì)算。這樣后臺(tái)運(yùn)行的時(shí)間仍然為10分鐘搔扁,但并不連續(xù)爸舒,這樣做的優(yōu)點(diǎn)為省電蟋字。

如現(xiàn)在有一些詞典應(yīng)用帶有后臺(tái)復(fù)制選詞功能,實(shí)際上其是利用了這個(gè)接口扭勉,如果用戶開(kāi)啟詞典后并推出鹊奖,即使屏幕關(guān)閉,但詞典仍然在后臺(tái)運(yùn)行涂炎,電量消耗還是比較大的嫉入,在iOS 7上,這個(gè)問(wèn)題可以得到解決璧尸。

6、 Remote Notification熬拒,這是本次較大的一個(gè)改進(jìn)接口爷光,以往聊天類應(yīng)用接受推送后點(diǎn)進(jìn)去需要再收一次信息,這情況在QQ澎粟、微信等應(yīng)用上最為明顯蛀序。不過(guò)擁有了這個(gè)接口后,這情況將不復(fù)存在活烙,以后推送將能夠直接啟動(dòng)后臺(tái)任務(wù)徐裸。值得注意的是remote notification支持silent notification(靜默推送),這樣dropbox這類同步應(yīng)用可以在后臺(tái)以最節(jié)能的模式實(shí)時(shí)靜默同步了啸盏,類似布卡漫畫(huà)這種也可以推送正在追的漫畫(huà)的新章節(jié)并在后臺(tái)靜默下載重贺,待到下載好再給用戶發(fā)送一個(gè)本地推送,用戶點(diǎn)開(kāi)即看無(wú)需再聯(lián)網(wǎng)回懦。

7气笙、Background Transfer Service,后臺(tái)上傳下載怯晕。iOS最接近傳統(tǒng)多任務(wù)的后臺(tái)接口潜圃,可供任意類型的app調(diào)用,無(wú)時(shí)間限制舟茶。應(yīng)用場(chǎng)景包括后臺(tái)上傳和下載數(shù)據(jù)谭期,這使得游戲后臺(tái)更新數(shù)據(jù)包,后臺(tái)上傳視頻等等都成為可能吧凉,但是正如其名字隧出,它只能用于處理上傳下載這種傳輸類的任務(wù),類似后臺(tái)剪切板監(jiān)控這種它就無(wú)能為力了客燕。

iOS 7新增的background fetch鸳劳,這個(gè)后臺(tái)接口在蘋(píng)果WWDC 2013上有提及,其會(huì)根據(jù)用戶行為自動(dòng)調(diào)整達(dá)到效率最優(yōu)的后臺(tái)模式也搓,能夠處理不是很有時(shí)效性的信息獲取赏廓。例如一些社交涵紊、新聞?lì)惖膽?yīng)用的后臺(tái)信息更新,iOS系統(tǒng)便會(huì)根據(jù)應(yīng)用啟動(dòng)頻率幔摸、時(shí)間和當(dāng)前網(wǎng)絡(luò)和電量的狀況來(lái)智能分配每個(gè)應(yīng)用的后臺(tái)獲取頻率和啟動(dòng)時(shí)長(zhǎng)摸柄。

當(dāng)前社交項(xiàng)目,如何使用ios后臺(tái)

1.當(dāng)前項(xiàng)目特點(diǎn):
a. 在保存長(zhǎng)連接的情況下既忆,用戶一直在線驱负,才能即時(shí)接收到消息;
b. 在初始化連接的時(shí)候患雇,需要做很多處理跃脊,如果經(jīng)常連接,必然很耗電苛吱, 所以盡力在后臺(tái)的時(shí)候酪术,不是時(shí)常斷開(kāi)后又連接;

  1. 通過(guò)以上分析翠储,改選用何種方式來(lái)保存app后臺(tái)運(yùn)行
    voip不行绘雁;
    靜音播放,不清除這種方式援所,是否可以通過(guò)審核庐舟;
    vpns推送,可取的方式住拭,(具體方法: 用戶在登錄后挪略,發(fā)送一個(gè)設(shè)備的tokenid; 在發(fā)送消息時(shí)废酷,平臺(tái)根據(jù)對(duì)方是離線還是在線瘟檩,來(lái)判斷要不要發(fā)推送消息)
    3.background fetch在該項(xiàng)目中的應(yīng)用
    由于該app在初始化時(shí),需要耗點(diǎn)時(shí)間澈蟆,最好的方式就是通過(guò) 后臺(tái)獲取 來(lái)處理該工作墨辛,這樣能保證用戶的流暢體驗(yàn)。

保持程序在后臺(tái)長(zhǎng)時(shí)間運(yùn)行

iOS為了讓設(shè)備盡量省電趴俘,減少不必要的開(kāi)銷睹簇,保持系統(tǒng)流暢,因而對(duì)后臺(tái)機(jī)制采用墓碑式的“假后臺(tái)”寥闪。除了系統(tǒng)官方極少數(shù)程序可以真后臺(tái)太惠,一般開(kāi)發(fā)者開(kāi)發(fā)出來(lái)的應(yīng)用程序后臺(tái)受到以下限制:

1.用戶按Home之后,App轉(zhuǎn)入后臺(tái)進(jìn)行運(yùn)行疲憋,此時(shí)擁有180s后臺(tái)時(shí)間(iOS7)或者600s(iOS6)運(yùn)行時(shí)間可以處理后臺(tái)操作
2.當(dāng)180S或者600S時(shí)間過(guò)去之后凿渊,可以告知系統(tǒng)未完成任務(wù),需要申請(qǐng)繼續(xù)完成,系統(tǒng)批準(zhǔn)申請(qǐng)之后埃脏,可以繼續(xù)運(yùn)行搪锣,但總時(shí)間不會(huì)超過(guò)10分鐘。
3.當(dāng)10分鐘時(shí)間到之后彩掐,無(wú)論怎么向系統(tǒng)申請(qǐng)繼續(xù)后臺(tái)构舟,系統(tǒng)會(huì)強(qiáng)制掛起App,掛起所有后臺(tái)操作堵幽、線程狗超,直到用戶再次點(diǎn)擊App之后才會(huì)繼續(xù)運(yùn)行。
當(dāng)然iOS為了特殊應(yīng)用也保留了一些可以實(shí)現(xiàn)“真后臺(tái)”的方法朴下,摘取比較常用的:
1.VOIP
2.定位服務(wù)
3.后臺(tái)下載
4.在后臺(tái)一直播放無(wú)聲音樂(lè)(容易受到電話或者其他程序影響努咐,所以暫未考慮)
5….更多
其中VOIP需要綁定一個(gè)Socket鏈接并申明給系統(tǒng),系統(tǒng)將會(huì)在后臺(tái)接管這個(gè)連接殴胧,一旦遠(yuǎn)端數(shù)據(jù)過(guò)來(lái)麦撵,你的App將會(huì)被喚醒10s(或者更少)的時(shí)間來(lái)處理數(shù)據(jù),超過(guò)時(shí)間或者處理完畢溃肪,程序繼續(xù)休眠。
后臺(tái)現(xiàn)在是iOS7引入的新API音五,網(wǎng)上實(shí)現(xiàn)的代碼比較少惫撰,博主也沒(méi)有細(xì)心去找。
由于博主要做的App需要在后臺(tái)一直運(yùn)行躺涝,每隔一段時(shí)間給服務(wù)器主動(dòng)發(fā)送消息來(lái)保持帳號(hào)登陸狀態(tài)厨钻,因而必須確保App不被系統(tǒng)墓碑限制。
博主最先嘗試了很多方法坚嗜,包括朋友發(fā)來(lái)的一個(gè)Demo夯膀,每180s后臺(tái)時(shí)間過(guò)期就銷毀自己然后再創(chuàng)建一個(gè)后臺(tái)任務(wù),但是實(shí)際測(cè)試只有10分鐘時(shí)間苍蔬。最后因?yàn)榭紤]到VOIP對(duì)服務(wù)端改動(dòng)太大诱建,時(shí)間又太緊,所以選擇了定位服務(wù)的方法來(lái)保持后臺(tái)碟绑。
4.在程序轉(zhuǎn)入后臺(tái)的時(shí)候俺猿,啟動(dòng)定位服務(wù)
[locationManager startUpdatingLocation];(第一次運(yùn)行這個(gè)方法的時(shí)候,如果之前用戶沒(méi)有使用過(guò)App格仲,則會(huì)彈出是否允許位置服務(wù)押袍,關(guān)于用戶是否允許,后面代碼中有判斷)
這樣在定位服務(wù)可用的時(shí)候凯肋,程序會(huì)不斷刷新后臺(tái)時(shí)間谊惭,實(shí)際測(cè)試,發(fā)現(xiàn)后臺(tái)180s時(shí)間不斷被刷新,達(dá)到長(zhǎng)久后臺(tái)的目的圈盔。
但是這樣使用也有一些問(wèn)題豹芯,在部分機(jī)器上面,定位服務(wù)即使打開(kāi)也可能不能刷新后臺(tái)時(shí)間药磺,需要完全結(jié)束程序再運(yùn)行告组。穩(wěn)定性不知道是因?yàn)榇a原因還是系統(tǒng)某些機(jī)制原因。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末癌佩,一起剝皮案震驚了整個(gè)濱河市木缝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌围辙,老刑警劉巖我碟,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異姚建,居然都是意外死亡矫俺,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門掸冤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)厘托,“玉大人,你說(shuō)我怎么就攤上這事稿湿∏ζィ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵饺藤,是天一觀的道長(zhǎng)包斑。 經(jīng)常有香客問(wèn)我,道長(zhǎng)涕俗,這世上最難降的妖魔是什么罗丰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮再姑,結(jié)果婚禮上萌抵,老公的妹妹穿的比我還像新娘。我一直安慰自己元镀,他們只是感情好谜嫉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著凹联,像睡著了一般沐兰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔽挠,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天住闯,我揣著相機(jī)與錄音瓜浸,去河邊找鬼。 笑死比原,一個(gè)胖子當(dāng)著我的面吹牛插佛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播量窘,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼雇寇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蚌铜?” 一聲冷哼從身側(cè)響起锨侯,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冬殃,沒(méi)想到半個(gè)月后囚痴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡审葬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年深滚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涣觉。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡痴荐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出官册,到底是詐尸還是另有隱情蹬昌,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布攀隔,位于F島的核電站,受9級(jí)特大地震影響栖榨,放射性物質(zhì)發(fā)生泄漏昆汹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一婴栽、第九天 我趴在偏房一處隱蔽的房頂上張望满粗。 院中可真熱鬧,春花似錦愚争、人聲如沸映皆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捅彻。三九已至,卻和暖如春鞍陨,著一層夾襖步出監(jiān)牢的瞬間步淹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缭裆,地道東北人键闺。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像澈驼,于是被迫代替她去往敵國(guó)和親辛燥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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