


但凡涉及到iOS與Android的比較,大多數媒體/作者都少不了要加上“Android是真后臺,iOS是偽后臺”這一條,Android是真后臺真沒錯,它允許APP留存在后臺,依靠著Service服務組件繼續運行,搶占前臺CPU資源,這也是Android手機容易卡頓的根源,而關于iOS是“偽后臺”的舉證也很多,如后臺不會下載、開多個網頁后切換需要重加載等,那么iOS真的就是“偽后臺”嗎?
在iOS的歷史上,iOS 7絕對是有里程碑意義的,或許大多數人只能看到UI從擬物化到扁平化的巨大變遷,但是,iOS 7在后臺管理上的改進同樣是歷史性的。
但凡涉及到iOS與Android的比較,大多數媒體/作者都少不了要加上“Android是真后臺,iOS是偽后臺”這一條,Android是真后臺真沒錯,它允許APP留存在后臺,依靠著Service服務組件繼續運行,搶占前臺CPU資源,這也是Android手機容易卡頓的根源,而關于iOS是“偽后臺”的舉證也很多,如后臺不會下載、開多個網頁后切換需要重加載等,那么iOS真的就是“偽后臺”嗎?
“偽后臺”從iOS 4開始
從iOS 3開始,蘋果為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之前,如果應用在后臺運行,那么即使你已鎖屏了,這些應用還會繼續運行,你的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后臺管理是相當智能的,這一點可能很多用戶不太知情,它會記憶用戶的一些行為習慣,比如你每天早上都要打開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的魅力所在。