標籤:

為什麼iOS偽後台,但是有很多軟體也會在後台一直運行?


iOS是偽後台沒錯,但是那是很多年前的事了。

大概是iOS3的時候,iOS引進了push notification。實現了應用即使不啟動也能收到推送消息。

iOS4的時候,引進了後台墓碑,實現了多任務功能。後台應用以墓碑的形式保存在內存中,用戶可以快速恢復。當內存不夠的時候,系統會自動退出最早的應用程序。

這一時期,一些特殊類型的應用也是可以在後台運行的,比如後台音頻播放類,VoIP類,newsstand,位置服務等。

然後是2013年發布的iOS7,對多任務功能進行了極大的增強。

後台任務

iOS7以前的應用退到後台後是允許運行一段時間的。但是iOS7開始,一旦手機休眠,後台應用將被儘快暫停。之後系統會在特定時間進行系統應用的操作被喚醒時(比如檢查郵件或接到電話),將之前暫停的後台應用一起執行。這樣,系統就不會單獨為第三方應用而使手機處於活動狀態,從而延長了待機時間。

後台獲取(background fetch)

iOS7以前的應用在後台是不能獲取信息的。應用必須再打開的時候才能聯網獲取信息。iOS7以後,應用在後台就可以直接獲取網路上的信息。比如天氣可以在後台獲取信息進行刷新,微信也可以在後台自動更新朋友圈的信息。不過同樣為了保證續航,更新的間隔時間由系統根據用戶使用情況自行決定,不會讓第三方應用隨意的在後台啟動和獲取信息的。

推送喚醒(remote notifications)

iOS7以前,當你收到推送消息時,你需要先打開應用,等待應用從網路上獲取推送的信息之後,才能將信息呈現出來。而iOS7改變了這一過程。當系統收到推送消息時,不是首先提醒用戶,而是喚醒對應的應用,讓應用在後台獲取對應的信息。當信息處理完成後,再提醒用戶。一個很小的改變,但是可以很大的提升用戶體驗。同樣,iOS系統也會限制這種推送消息的頻率,防止系統被頻繁喚醒影響續航。

後台傳輸(background transfer services)

iOS7以前,應用程序在大量數據的上傳下載這方面限制是比較多的。應用只能在前台進行這種數據傳輸,你不能做其他事情。因為一旦退到後台之後,應用只能被允許運行一段時間(最長10分鐘),很難完成這種大量數據的傳輸。而iOS7推出了後台傳輸功能,應用在退到後台之後,可以將這種上傳和下載數據交給iOS系統來維護和管理。這種後台數據傳輸沒有時間的限制,傳輸過程中用戶也可以繼續使用其他應用。同樣為了保持電力續航和保護數據流量,這種後台傳輸僅限WIFI網路。

可以看出,蘋果非常用心,採用了非常複雜的設計思路,目的就是為了實現真後台才能實現的那些功能(推送,後台更新,上傳下載等功能其實都有了),同時又不讓後台應用影響耗電,最大程度的保證手機續航能力。而這一切,是兩年前的iOS7就推出的功能了。(居然還有人說iOS7主要改動就是界面?)

所以,iOS是有後台的。只是很多人對iOS的後台印象其實還停留在兩年以前。


因為iOS偽後台本來就是扯淡的說法


前半句就不對,還怎麼說後半句。

這都什麼年代了,怎麼還有人信這種遠古消息,iOS偽後台,Android卡,呵呵噠


因為可以申請後台運行



WP後台管理才叫給力。表示如果禁止電話應用後台運行 直接就接不到電話了


根據產品屬性文件里Application does not run in background是與否,可以控制可不可以後台運行或掛起,當然內存不夠就系統強制清除了


打開VoiceOver 進入後台 一個一個選程序系統會聽到有的系統會說活躍 有的不會說


內存夠用就在後台,內存不夠就殺掉最不常用的那個


推薦閱讀:

作為iOS開發,需要具備怎樣的能力,才能在北上廣,拿到1萬的薪資?
資深 iOS 開發工程師需要達到什麼水平?
如何評價 Swift 4 的開發計劃?
請求參數用string好還是數字好?
先開發 iOS 應用好,還是先開發 Android 應用好?

TAG:iOS | iOS開發 |