真正的后臺是要付出代價的
再來說說Android。Android系統的運行方式是這樣的:當你運行了一個應用,就進入了該應用相應的層面;當你又運行了一個應用時,就又進入了這個應用的層面。新的層覆蓋在舊的上面,相互疊加,周而復始。谷歌為開發者提供了7個API,來調整應用層之間的切換和運行,它的用途主要是用來設置如何切換,以及切換后要做怎樣的操作。
當新的層活動時,會疊加到下面的層上,下面的層就會凍結,或者說是被掛起。新的層處于激活狀態。這時按返回鍵的話,所有不可見的層就全部被凍結。
在Android系統后臺凍結中的應用
在后臺運行上,谷歌提供了兩種解決方案:
服務類(Service):
可為應用提供一個內容由程序自身決定的服務,應用可以將需要在后臺執行的操作寫入服務中。當這個應用被切回后臺,它的所以活動都被凍結。但寫入服務的那些操作仍然可由系統繼續執行。如QQ這樣,只運行該應用的某個活動。
廣播接收類(Broadcast receiver):
它可以讓應用在后臺完整運行,而不像服務類,只能運行某一部分活動。但前提是應用必須給系統一個既定的運行時間和目標,當應用消耗完時間,或達成了目標后,系統就會結束并凍結該應用的所有活動。這個類普遍存在于鬧鐘和GPS類的應用當中。
當然,這兩種類并不是隨便給予的,還是要有一定限制條件,在某種用途中可以指定分配服務類或廣播類。廣播類還會根據需求限制最大時間,從而防止被應用隨意使用,造成系統拖慢。
理論上Android系統沒有運行程序的數量限制,只要內存足夠,可以無限制的開啟任意多個應用。最后,當后臺中運行的應用越來越多,運行內存吃緊,系統便會強制結束凍結中的活動。優先結束沒有服務類和廣播類的活動,其次是服務類,如果內存還是不夠,最后就會結束廣播類的活動。
總結:
從上面兩個系統的多任務的描述來看,IOS和Android都是支持多任務的,而且機制幾乎相同——大體上都是,前臺運行后臺掛,特殊情況有權限。
比較起來,Android系統給予應用的特殊權限比IOS要多些(這也是為什么IOS用起來比較順滑的原因)。這還得說IOS有比較先進的推送系統,而Android就比較慚愧了。
所以為了讓更多活動及時的從后臺推送到前臺,Android就必須讓更多的應用在后臺運行,也就需要占用更多的內存和處理能力,自然需要付出更高的電力和更好的硬件作為代價。