對 iOS 多任務的誤解 [多任務原理]

來源:互聯網
上載者:User

轉載地址: 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應用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.