轉載地址: http://blog.csdn.net/kmyhy/article/details/7940704
如今,多任務這個有趣特性已經成功整合在裝置中,我們如今使用的智能手機完全支援多任務,這其中有一個東西尤其功不可沒。這就是蘋果的iPhone手機。
iOS是使用廣泛的令人驚歎的作業系統。在2010年之後iOS 4 變成了多任務作業系統。眾所周知,當你開啟一個應用程式然後退出,它仍然會保留在後台。
當然,這會導致電池的消耗,你必須手動關閉它們。其實這根本不關電池消耗的事。一些開發人員在他們的部落格中也提到這一點。
Fraser Speirs是Connected Flow 公司的程式員,同時是雪松英才學校(蘇格蘭的一所少年學校,使用iPad進行教學)IT和電腦部門的負責人。在他的文章中,他解釋了關於iOS多任務的美麗的誤會。
首先是關於電池消耗:這確實需要注意,但這個問題要區別對待,說出這個問題的人並不清楚真正的原因。
他進一步解釋:事實上,iOS多工作列並不是包含“所有正在啟動並執行應用程式列表”,它僅僅是“最近使用過的應用程式列表”。使用者根本沒有必要自己管理iOS的背景工作。
除了一些特殊情況(我會解釋),顯示在多工作列中的app當前並不處於運行狀態。當你按下Home按鈕,iOS將通知app退出。大部分情況下,它將退出,不再佔用CPU時間(包括電池),釋放記憶體(需要的時候恢複)。
他解釋:iOS 應用程式有5個狀態:
停止運行-應用程式已經終止,或者還未啟動。
不活動-應用程式處於前台但不再接收事件(例如,使用者在app處於活動時鎖住了裝置)。
活動-app處於“使用中”的狀態。
後台-app不再螢幕上顯示,但它仍然執行代碼。
掛起-app仍然駐留記憶體但不再執行代碼。
在此,我們不討論app的活動/不活動狀態。絕大部分困惑是在app從活動狀態轉入後台,然後到掛起,最後到停止運行這個過程中產生的。
按下Home鍵時,app從活動狀態轉入後台,絕大部分app通常在幾秒內就從後台變成了掛起。
第一個技術細節是,掛起的app仍然駐留在裝置記憶體內。這就是為什麼當你返回app時,能快速恢複它們的原因。它們並沒有佔用cpu時間,也不消耗電池電量。
你會想到,如果app駐留在記憶體,你必須想辦法刪除它們以便節約記憶體。如果你不刪除它們iOS也會刪除它們。如果app處於掛起狀態,當你開啟一個記憶體敏感的app,比如一個大遊戲時,iOS會自動清理掛起的app,將他們變為停止運行狀態。這樣,它們就完全被清理出記憶體,當你再次點擊app表徵圖它們會重新啟動。
人們容易混淆的是:所有這些都對多工作列沒有影響。多任務纜總是顯示最近使用的app列表,而跟它們是否處於後台、掛起或停止運行狀態無關。你應該注意到,當前處於活動狀態的app並不顯示在多工作列中。
背景工作
當app被移到後台,通常幾秒內就會被移到掛起狀態。app能夠延長這個時間,通過聲明一個“背景工作”。
例如,有的app需要下載比較大的檔案。比如我最愛的微博Instacast。當Instacast處於活動狀態,它會開始下載新的部落格。如果我點擊Home鍵,Instacast會花5秒鐘繼續運行於後台狀態,然後掛起。這將中斷部落格的下載,可能是5分鐘或者更多。
iOS允許Instacast聲明一個後台下載任務。這會讓Instacast在我按下Home鍵之後仍然有額外的時間在後台運行,知道部落格下載完成。app能申請的後台已耗用時間並不是無限的,app只能申請大約10分鐘的後台已耗用時間,然後被iOS強行掛起。但是你無須為此擔心。
無限的後台已耗用時間
所有的app都有5秒的後台已耗用時間。一些app可以請求10分鐘的額外時間。有一小部分app確實需要無限的後台已耗用時間,iOS是允許的。
準確地說,在iOS5中,有5類app允許有無限的後台已耗用時間:
1. 可以在背景播放聲頻的app。例如Instacast在播放一個部落格時。
2. 可以在後台跟蹤你的位置的app。例如,TomTom導航系統,哪怕在另外一個app處於活動時,它也能發出語音提示。
3. 監聽VOIP呼入的app。使用Skype時,當Skype在後台運行時,你仍然可以收到Skype來電。
4. 可以下載新內容的報刊類app。
5. 後台連續接收來自外部硬體(ExernalAccessory架構)的更新。
上面5種app在任務執行完畢時自動變成掛起狀態。當Instacast停止部落格播放時,它將掛起。還有一些iOS內建的app也能在後台連續運行,我們用的最多的可能是Mail程式。
無論這些app在後台運行多長時間,它們都會佔用記憶體、CPU時間和電量。一般,你會知道你正在使用類似的app。開發人員必須聲明它們所需要的後台運行類別,AppStore會檢查這些聲明是否被濫用。
前面我說過“使用者根本沒有必要自己管理iOS的背景工作”。當然,如果後台啟動並執行app崩潰並無法正常關閉時則另當別論。不過對於iOS使用者而言,這並不多見。
總結
讓我們回顧一下:
當有人告訴你凡是在多工作列中的app都是當前正在啟動並執行,它們都是佔用記憶體或者消耗電池的——這是不對的。
當你按下Home鍵,app從活動狀態變為後台狀態並迅速轉為掛起狀態,此時它不 再佔用CPU時間和電量。
一個app可以請求10分鐘左右的後台已耗用時間,以完成長時任務,然後才變為掛起狀態。
當記憶體緊張時,iOS自動移除掛起的app,將它們變為停止運行狀態並回收記憶體。
有5類app-audio、GPS、VOIP、Newsstand(報刊欄)及accessory,以及一些內建的app(如Mail)可以無限制後台運行一直到他們的任務完成。
簡單地說:你不需要管理iOS背景工作。系統會自動處理,你需要做的僅僅是寫好你的audio、GPS、VOIP、Newsstand和Accessory應用。