關於iOS的後臺,如下引用一些文段進行一下腦補,請同窗們大體看一下,有個基礎,原文出處html
-----------------------------------------------------------------------------------------------ios
OS 7中,實際上APP擁有四種後臺模式,不管是哪種後臺機制,均須要利用蘋果給予的相應後臺接口實現。IOS7系統中,開發者能夠靈活利用多種後臺接口(API)實現更加智能的應用操做。
一,無後臺僅推送
第 一種後臺方式爲傳統的無後臺操做,僅有蘋果推送機制,這種方式出如今iOS 3.x如下的大部分系統版本上。這個方式下,應用在按下Home鍵後即會關閉退出,其數據經過蘋果搭建的推送服務器傳輸,並不須要應用後臺運行。這種方式 不太好的緣由在於,每次推出後,從新進入均須要從新加載,雖然推送可以統一解決數據和信息的傳輸,但遇到須要頻繁進入應用(如聊天APP)的時候便會顯得 體驗很差。
二,墓碑式
第二種方式爲墓碑式的後臺機制,這在iOS 4後被大量採用,也就是人們所說的僞多任務。這方式相比較第一種改進的地方在於,按下Home鍵至主界面後,應用隨即進入後臺,但其被凍結,並不能進行任何操做。
三,智能調度後臺
第三種爲系統智能調度的後臺,iOS 7新增的background fetch, 這個後臺接口在蘋果WWDC 2013上有說起,其會根據用戶行爲自動調整達到效率最優的後臺模式,可以處理不是頗有時效性的信息獲取。例如一些社交、新聞類的應用的後臺信息更 新,iOS系統便會根據應用啓動頻率、時間和當前網絡和電量的情況來智能分配每一個應用的後臺獲取頻率和啓動時長。
因爲擁有該接口的應用的數據後臺 刷新操做是統一調度的,所以系統能夠在一個進程裏面得到多個應用的數據,相似統一的推送機制,這樣就可以最大限度地省電。 不過這個方式也有一個缺點,那即是開發者不能設定數據具體何時更新,所以這個後臺方式只能應用在一些時效性和敏感度不高的地方。
四,真後臺
第四種方式即是真後臺機制,但iOS的真後臺與Android的後臺機制是不同的,爲了兼顧系統體驗和統一進程管理,iOS在這上面加入了衆多的限制。大體擁有如下幾個後臺接口模式:
一、Background Audio,這是後臺的音頻,這個很早以前便有,也是iOS設備中用得最多的後臺應用,調用這個接口能夠實現後臺的音樂播放。
二、Location Services,這是後臺的定位,系統會擁有統一頁面進行管理。
三、VoIP,後臺語音服務,相似Skype通話應用須要調用,可進行後臺的語音通話。
四、Newsstand,報刊雜誌後臺自動下載更新,其可以自動實時更新。
五、 Background Task Completion,這個接口早在iOS 4時候便擁有,其能夠供任意類型的APP使用,不過在舊系統中,這個接口的後臺限制運行時間僅爲10分鐘,意味着當應用退至後臺,其後臺運行僅能持續10 分鐘便會轉至休眠狀態。iOS 7中對這個接口做出了改變,原來的爲連續10分鐘,即不論你這10分鐘內用戶是否關閉屏幕進入休眠狀態,應用仍然會在後臺等待10分鐘完結後推出,而新的 改進爲假如遇到關閉屏幕休眠的狀況,這後臺運行的10分鐘便會跟隨一同休眠,剩餘的後臺時間將會留待用戶再一次喚醒設備才計算。這樣後臺運行的時間仍然爲 10分鐘,但並不連續,這樣作的優勢爲省電。
如如今有一些詞典應用帶有後臺複製選詞功能,實際上其是利用了這個接口,若是用戶開啓詞典後並推出,即便屏幕關閉,但詞典仍然在後臺運行,電量消耗仍是比較大的,在iOS 7上,這個問題能夠獲得解決。
六、 Remote Notification,這是本次較大的一個改進接口,以往聊天類應用接受推送後點進去須要再收一次信息,這狀況在QQ、微信等應用上最爲明顯。不過擁 有了這個接口後,這狀況將不復存在,之後推送將可以直接啓動後臺任務。值得注意的是remote notification支持silent notification(靜默推送),這樣dropbox這類同步應用能夠在後臺以最節能的模式實時靜默同步了,相似布卡漫畫這種也能夠推送正在追的漫 畫的新章節並在後臺靜默下載,待到下載好再給用戶發送一個本地推送,用戶點開即看無需再聯網
七、Background Transfer Service,後臺上傳下載。iOS最接近傳統多任務的後臺接口,可供任意類型的app調用,無時間限制。應用場景包括後臺上傳和下載數據,這使得遊戲 後臺更新數據包,後臺上傳視頻等等都成爲可能,可是正如其名字,它只能用於處理上傳下載這種傳輸類的任務,相似後臺剪切板監控這種它就無能爲力了。服務器
--------------------------------------------------------------------------------------------------------------------------------微信
如下介紹一下實際操做網絡
首先咱們在工程中選擇Gapability,找到back ground mode,如圖多線程
咱們拿location updates刷新來舉例app
當咱們初始化CLLocationmanager以後,須要額外添加這樣一句代碼函數
self.manger.pausesLocationUpdatesAutomatically = NO; //該模式是抵抗ios在後臺殺死程序設置,iOS會根據當前手機使用情況會自動關閉某些應用程序的後臺刷新,該語句申明不可以被暫停,可是不必定iOS系統在性能不佳的狀況下強制結束應用刷新
通過測試,CLLocationmanager協議方法能在後臺一直被調用,此時App是比較耗電的,若是後臺擁有其餘處理和運算的需求,最好將位置更新觸發的操做進行多線程處理,最好是多線程排隊處理。還有一種方法就是在AppDelegate中的生命週期函數裏,在即將進入後臺的時候將CLLocationmanager的閥值下降,比方說原來監測的米級別,能夠下降成公里級別性能
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."); }