但凡涉及到iOS與Android的比較,大多數媒體/作者都少不了要加上“Android是真後台,iOS是偽後台”這一條,Android是真後台真沒錯,它允許APP留存在後台,依靠著Service服務組件繼續運行,搶占前台CPU資源,這也是Android手機容易卡頓的根源,而關於iOS是“偽後台”的舉證也很多,如後台不會下載、開多個網頁後切換需要重加載等,那麼iOS真的就是“偽後台”嗎?
“偽後台”從iOS 4開始
從iOS3開始,蘋果為iPhone引進了push notification,不啟動應用也能收到推送消息,原理是消息由APNS(Apple Push Notification Service,Apple Push服務器)統一管理,即便到了今天,APNS還是如神一般存在,而Android中各種誤殺造成收不到微信消息想必各位都有過體驗。
隨著iOS 4的發布,iOS也開始有了多任務功能,當你點擊Home鍵後,當前程序轉入後台(iOS 4之前按Home鍵就直接干掉應用了),後台應用以墓碑的形式(退出前的狀態)保存在內存中,用戶可以快速恢復。但是蘋果對後台的限制非常嚴格,只有一些特殊應用可以在後台真正運行,比如音頻播放類,VoIP類,newsstand,位置服務等。
如果不做任何配置的話,你的應用最多只能在後台運行5秒,之後就會被掛起 (存於內存但不運行),如果你配置了後台運行(如需下載),大概在594秒(9.9分鐘)時進程停止,程序同樣也會被掛起,一旦系統需要內存了,最早的後台進程就會被殺掉以釋放內存。
蘋果這樣的設計最大程度的保證了當前活躍程序的系統資源,保證了手機的流暢性及續航能力,同時,後台進程基本上在幾秒後就被掛起,所以在後台游戲的進度不會被改變,下載也可能不會繼續,提交到Appstore的各類APP也會被嚴格審查是否有越權犯規行為,“偽後台”的稱呼也就這樣出現了。
iOS 7之前後台進程的工作方式
在iOS 7之前,如果應用在後台運行,那麼即使你已鎖屏了,這些應用還會繼續運行,你的iPhone一直處於喚醒狀態,直到後台應用完成任務或超時才能進入休眠。
從2010年起,iOS的這種多任務和後台管理持續了三年時間,經歷了iOS 4、iOS 5、iOS 6三代,其間的改變很少,稱之為“偽後台”也不為過,畢竟真正能在後台運行的非常非常有限,直到iOS 7的誕生。
iOS 7,從“偽後台”到“智能後台”
在iOS的歷史上,iOS 7絕對是有裡程碑意義的,或許大多數人只能看到UI從擬物化到扁平化的巨大變化,但是,iOS 7在後台管理上的改進同樣是歷史性的。在WWDC 2013上,蘋果就iOS 7的多任務改進作了專門的會議講解(傳送門),就可見其重要性。簡單地說,iOS 7不僅是改變了一些後台任務處理方式,還加入了一些新的後台模式。
iOS 7之後的後台進程工作方式
從iOS 7開始,一旦手機鎖屏,後台應用將也會很快被暫停(不是像之前那樣要一直運行到完成任務或超時),之後當系統被喚醒時(比如接到電話),那些暫停的後台應用也會一起繼續運行。這樣的好處是,系統不會因為第三方應用在後台運行而長時間處於喚醒狀態,對電池續航有益,而且第三方應用的保持時間也更久了(雖然真正的活躍時間是一樣的)。
智能後台,適應用戶的使用習慣
現在的iOS後台管理是相當智能的,這一點可能很多用戶不太知情,它會記憶用戶的一些行為習慣,比如你每天早上都要打開A應用,中午會打開B應用,晚上會打開A應用,經過一段時間的記憶後,iOS會在早上、中午、晚上的適當時間喚醒或啟動相應的A、B、A應用,提升用戶體驗,這一點就夠Android學的了。
除了這些後台運行方式外,iOS 7還新增了三種後台模式,即Background Fetch、Silent Remote Notifications和Background Transfer Service。
Background Fetch(後台獲取):iOS 7之前的應用必須在打開的時候才能聯網獲取信息,而Background Fetch能讓應用在後台就可以直接獲取信息,比如微信可以在後台自動更新朋友圈。
Silent Remote Notifications(靜默推送喚醒):以前,當收到消息後,只有打開應用後才能從APNS獲取推送的具體消息,現在有了Silent Remote Notifications,變得更人性化了,當收到消息後隨即喚醒相應的APP,讓該APP在後台獲取消息,然後再通知用戶,大大提升了用戶體驗。
Background Transfer service(後台傳輸):以前一旦下載被轉到後台最多只能被允許運行一段時間(最長10分鐘),很難完成大量的數據傳輸。現在好了,所有的下載任務會交給系統的獨立進程去完成,不管APP在前台、掛起還是被干掉,下載都在繼續進行。
以前是“偽後台”,現在是“智能後台”
強調一下,iOS多任務界面中列出來的應用只是最近使用過的,而不是在後台的程序,Android也一樣。
早前說iOS是“偽後台”也沒錯,但那是兩年前的事了,隨著iOS 7的出現,這些都發現了質的變化,我們也應該與時俱進,與其說它是“偽後台”,還不如說iOS是“智能後台”。
蘋果非常用心,采用了非常復雜的設計邏輯,在兼顧系統安全性、流暢性和續航能力的基礎上,最大限度上實現了真後台的一些功能,比如後台刷新、推送喚醒和後台傳輸,尤其是能根據用戶的行為習慣,提前喚醒/啟動一些高頻使用的APP,不需要在打開後重新加載,你不該誇它還算智能嗎?而這些不為人知的細節上的完美追求,也正是iOS的魅力所在。