關于iOS的后臺,以下引用一些文段進行一下腦補泉沾,請同學們大致看一下捞蚂,有個基礎,原文出處
-----------------------------------------------------------------------------------------------
OS 7中跷究,實際上APP擁有四種后臺模式姓迅,無論是哪一種后臺機制,均需要利用蘋果給予的相應后臺接口實現(xiàn)俊马。IOS7系統(tǒng)中丁存,開發(fā)者可以靈活利用多種后臺接口(API)實現(xiàn)更加智能的應用操作。
一柴我,無后臺僅推送
第 一種后臺方式為傳統(tǒng)的無后臺操作解寝,僅有蘋果推送機制,這種方式出現(xiàn)在iOS 3.x以下的大部分系統(tǒng)版本上艘儒。這個方式下聋伦,應用在按下Home鍵后即會關閉退出夫偶,其數(shù)據通過蘋果搭建的推送服務器傳輸,并不需要應用后臺運行觉增。這種方式 不太好的原因在于兵拢,每次推出后,重新進入均需要重新加載逾礁,雖然推送能夠統(tǒng)一解決數(shù)據和信息的傳輸说铃,但遇到需要頻繁進入應用(如聊天APP)的時候便會顯得 體驗不好。
二嘹履,墓碑式
第二種方式為墓碑式的后臺機制腻扇,這在iOS 4后被大量采用,也就是人們所說的偽多任務植捎。這方式相比較第一種改進的地方在于衙解,按下Home鍵至主界面后,應用隨即進入后臺焰枢,但其被凍結,并不能進行任何操作舌剂。
三济锄,智能調度后臺
第三種為系統(tǒng)智能調度的后臺,iOS 7新增的background fetch霍转, 這個后臺接口在蘋果WWDC 2013上有提及荐绝,其會根據用戶行為自動調整達到效率最優(yōu)的后臺模式,能夠處理不是很有時效性的信息獲取避消。例如一些社交低滩、新聞類的應用的后臺信息更 新,iOS系統(tǒng)便會根據應用啟動頻率岩喷、時間和當前網絡和電量的狀況來智能分配每個應用的后臺獲取頻率和啟動時長恕沫。
由于擁有該接口的應用的數(shù)據后臺 刷新操作是統(tǒng)一調度的,因此系統(tǒng)可以在一個進程里面獲得多個應用的數(shù)據纱意,類似統(tǒng)一的推送機制婶溯,這樣就能夠最大限度地省電。 不過這個方式也有一個缺點偷霉,那便是開發(fā)者不能設定數(shù)據具體什么時候更新迄委,因此這個后臺方式只能應用在一些時效性和敏感度不高的地方。
四类少,真后臺
第四種方式便是真后臺機制叙身,但iOS的真后臺與Android的后臺機制是不一樣的,為了兼顧系統(tǒng)體驗和統(tǒng)一進程管理硫狞,iOS在這上面加入了眾多的限制信轿。大致?lián)碛幸韵聨讉€后臺接口模式:
1晃痴、Background Audio,這是后臺的音頻虏两,這個很早之前便有愧旦,也是iOS設備中用得最多的后臺應用,調用這個接口可以實現(xiàn)后臺的音樂播放定罢。
2笤虫、Location Services,這是后臺的定位祖凫,系統(tǒng)會擁有統(tǒng)一頁面進行管理琼蚯。
3、VoIP惠况,后臺語音服務遭庶,類似Skype通話應用需要調用,可進行后臺的語音通話稠屠。
4峦睡、Newsstand,報刊雜志后臺自動下載更新权埠,其能夠自動實時更新榨了。
5、 Background Task? Completion攘蔽,這個接口早在iOS 4時候便擁有龙屉,其可以供任意類型的APP使用,不過在舊系統(tǒng)中满俗,這個接口的后臺限制運行時間僅為10分鐘转捕,意味著當應用退至后臺,其后臺運行僅能持續(xù)10 分鐘便會轉至休眠狀態(tài)唆垃。iOS 7中對這個接口作出了改變五芝,原來的為連續(xù)10分鐘,即不論你這10分鐘內用戶是否關閉屏幕進入休眠狀態(tài)降盹,應用仍然會在后臺等待10分鐘完結后推出与柑,而新的 改進為假如遇到關閉屏幕休眠的情況,這后臺運行的10分鐘便會跟隨一同休眠蓄坏,剩余的后臺時間將會留待用戶再一次喚醒設備才計算价捧。這樣后臺運行的時間仍然為 10分鐘,但并不連續(xù)涡戳,這樣做的優(yōu)點為省電结蟋。
如現(xiàn)在有一些詞典應用帶有后臺復制選詞功能,實際上其是利用了這個接口渔彰,如果用戶開啟詞典后并推出嵌屎,即使屏幕關閉推正,但詞典仍然在后臺運行,電量消耗還是比較大的宝惰,在iOS 7上植榕,這個問題可以得到解決。
6尼夺、 Remote Notification尊残,這是本次較大的一個改進接口,以往聊天類應用接受推送后點進去需要再收一次信息淤堵,這情況在QQ寝衫、微信等應用上最為明顯。不過擁 有了這個接口后拐邪,這情況將不復存在慰毅,以后推送將能夠直接啟動后臺任務。值得注意的是remote notification支持silent notification(靜默推送)扎阶,這樣dropbox這類同步應用可以在后臺以最節(jié)能的模式實時靜默同步了汹胃,類似布卡漫畫這種也可以推送正在追的漫 畫的新章節(jié)并在后臺靜默下載,待到下載好再給用戶發(fā)送一個本地推送东臀,用戶點開即看無需再聯(lián)網
7统台、Background Transfer Service,后臺上傳下載啡邑。iOS最接近傳統(tǒng)多任務的后臺接口,可供任意類型的app調用井赌,無時間限制谤逼。應用場景包括后臺上傳和下載數(shù)據,這使得游戲 后臺更新數(shù)據包仇穗,后臺上傳視頻等等都成為可能流部,但是正如其名字,它只能用于處理上傳下載這種傳輸類的任務纹坐,類似后臺剪切板監(jiān)控這種它就無能為力了枝冀。
--------------------------------------------------------------------------------------------------------------------------------
以下介紹一下實際操作
首先我們在工程中選擇Gapability,找到back ground mode,如圖
我們拿location updates刷新來舉例
當我們初始化CLLocationmanager之后耘子,需要額外添加這樣一句代碼
self.manger.pausesLocationUpdatesAutomatically = NO; //該模式是抵抗ios在后臺殺死程序設置果漾,iOS會根據當前手機使用狀況會自動關閉某些應用程序的后臺刷新,該語句申明不能夠被暫停谷誓,但是不一定iOS系統(tǒng)在性能不佳的情況下強制結束應用刷新
經過測試绒障,CLLocationmanager協(xié)議方法能在后臺一直被調用,此時App是比較耗電的捍歪,如果后臺擁有其他處理和運算的需求户辱,最好將位置更新觸發(fā)的操作進行多線程處理鸵钝,最好是多線程排隊處理。還有一種方法就是在AppDelegate中的生命周期函數(shù)里庐镐,在即將進入后臺的時候將CLLocationmanager的閥值降低恩商,比方說原來監(jiān)測的米級別,可以降低成千米級別
在 applicationDidEnterBackground 中加入
復制代碼
if ([CLLocationManager significantLocationChangeMonitoringAvailable])
{
[[mapCenter manager] stopUpdatingLocation];
[[mapCenter manage ] startMonitoringSignificantLocationChanges];
}
else
{
NSLog(@"Significant location change monitoring is not available.");
}
復制代碼
在applicationDidBecomeActive 中加入
復制代碼
if ([CLLocationManager significantLocationChangeMonitoringAvailable])
{
[[mapCenter manager] stopMonitoringSignificantLocationChanges];
[[mapCenter manager] startUpdatingLocation];
}
else
{
NSLog(@"Significant location change monitoring is not available.");
}