關閉廣告

仍然有很多人不知道 iOS 中的多任務處理是如何運作的。然而,首先需要指出的是,這並不是真正的多工處理,而是一個非常聰明的解決方案,不會給系統或使用者帶來負擔。

人們經常聽到一種迷信,認為iOS中後台運行的應用程式會佔用操作內存,從而導致系統速度變慢和電池壽命縮短,因此用戶應該手動將其關閉。多工作列實際上並不包含所有正在運行的後台進程的列表,而僅包含最近啟動的應用程式。因此,除了少數情況外,使用者不必擔心後台運行的進程。當您按下“主頁”按鈕時,應用程式通常會進入睡眠狀態或關閉,以便它不再載入處理器或電池,並在必要時釋放必要的記憶體。

因此,當您有數十個進程運行時,這並不是成熟的多任務處理,只有一個應用程式始終在前台運行,必要時會暫停或完全關閉。只有少數輔助進程在後台運行。這就是為什麼您很少會在 iOS 上遇到應用程式崩潰的原因,例如 Android 因運行用戶必須處理的應用程式而不堪重負。一方面,這使得使用設備變得不愉快,另一方面,它會導致例如啟動緩慢和應用程式之間的轉換緩慢。

應用程式運行時類型

iOS 裝置上的應用程式處於以下 5 種狀態之一:

  • 跑步: 應用程式已啟動並在前台運行
  • 背景: 它仍在運行但在背景運行(我們可以使用其他應用程式)
  • 暫停: 仍在使用 RAM 但未運行
  • 不活動: 應用程式正在執行但間接命令(例如,當您在應用程式運行時鎖定裝置時)
  • 未運行: 應用程式已終止或尚未啟動

當應用程式進入背景以免打擾時,就會出現混亂。當您按下「主頁」按鈕或使用手勢關閉應用程式 (iPad) 時,應用程式將進入背景。大多數應用程式都會在幾秒鐘內掛起(它們存儲在iDevice 的RAM 中,因此可以快速啟動,它們不會給處理器加載太多,從而節省電池壽命)您可能會認為,如果應用程式繼續使用內存,那麼您就可以了手動刪除它以釋放它。但你不必這樣做,因為 iOS 會為你做這件事。如果您在後台暫停了要求較高的應用程序,例如使用大量 RAM 的遊戲,iOS 會在必要時自動將其從內存中刪除,您可以通過點擊應用程式圖標來重新啟動它。

這些狀態都不會反映在多工作列中,面板僅顯示最近啟動的應用程式列表,無論應用程式是停止、暫停還是在背景運行。您可能還注意到目前正在執行的應用程式沒有出現在「多工」面板中

後台任務

通常,當您按下主頁按鈕時,該應用程式將在背景運行,如果您不使用它,它會在五秒鐘內自動暫停。因此,例如,如果您正在下載播客,系統會將其評估為正在運行的應用程序,並將終止延遲十分鐘。最晚十分鐘後,該進程將從記憶體中釋放。簡而言之,如果完成下載的時間不超過 10 分鐘,您不必擔心按下主頁按鈕會中斷下載。

無限期後台運行

如果不活動,系統會在五秒鐘內終止應用程序,如果有下載,則會延遲十分鐘終止。然而,有少數應用程式需要在背景運行。以下是一些可以在 iOS 5 中無限期地在背景運行的應用程式範例:

  • 播放聲音且必須中斷一段時間的應用程式(在通話期間暫停音樂等),
  • 追蹤您位置的應用程式(導航軟體),
  • 接收 VoIP 呼叫的應用程序,例如,如果您使用 Skype,即使應用程式在後台,您也可以接聽呼叫,
  • 自動下載(例如報亭)。

如果所有應用程式不再執行任務(例如背景下載),則應關閉它們。但是,也有一些例外情況會在背景持續運行,例如本機郵件應用程式。如果它們在背景運行,則會佔用記憶體、CPU 使用率或縮短電池壽命

允許無限期在背景運行的應用程式可以在運行時執行任何操作,從播放音樂到下載新的播客劇集。

正如我之前提到的,用戶永遠不需要關閉後台運行的應用程式。唯一的例外是當後台運行的應用程式崩潰或無法正確從睡眠狀態喚醒時。然後用戶可以在多任務欄中手動關閉應用程序,但這種情況很少發生。

因此,一般來說,您不需要管理後台進程,因為系統會自行處理它們。這就是為什麼 iOS 是一個如此新鮮且快速的系統。

從開發者的角度來看

作為多工處理的一部分,應用程式可以對總共六種不同的狀態做出反應:

1.applicationWillResignActive

翻譯過來,這個狀態意味著該應用程式將在未來(幾毫秒的時間)辭去活動應用程式(即前台應用程式)的角色。例如,在使用應用程式時收到呼叫時會發生這種情況,但同時,此方法也會在應用程式進入背景之前導致這種狀態,因此您需要考慮這些變更。此方法也適用於,例如,當有來電時,它會暫停正在執行的所有活動,並等待通話結束。

2.應用程式DidEnterBackground

該狀態表示應用程式已進入背景。開發人員應該使用此方法掛起所有不一定需要在背景運行的進程,並清除內存中未使用的數據和其他進程,例如到期計時器、從內存中清除不一定需要的已加載圖像或關閉與伺服器的連接,除非應用程式在背景完成連接至關重要。當在應用程式中呼叫該方法時,如果不需要應用程式的某些部分在背景運行,則它本質上應該用於完全掛起應用程式。

3.應用程式將進入前台

此狀態與第一個狀態相反,在第一個狀態中應用程式將退回至活動狀態。該狀態僅意味著正在睡眠的應用程式將從後台恢復並在接下來的幾毫秒內出現在前台。開發人員應該使用此方法來恢復應用程式在背景時不活動的任何進程。應重新建立與伺服器的連接,重置計時器,將映像和資料載入到記憶體中,並且可以在使用者再次看到載入的應用程式之前恢復其他必要的進程。

4. applicationDidBecomeActive

該狀態表示應用程式恢復到前台後剛剛變為活動狀態。這是一種可用於對使用者介面進行額外調整或將 UI 恢復到原始狀態等的方法。這實際上發生在使用者已經在顯示器上看到應用程式的那一刻,因此有必要謹慎確定此方法和前一個方法中會發生什麼事。它們被一個接一個地調用,相差幾毫秒。

5. 應用程式將終止

此狀態發生在應用程式退出前幾毫秒,即應用程式實際終止之前。無論是在多工處理中手動還是在關閉設備時。此方法應用於保存已處理的資料、結束所有活動並刪除不再需要的資料。

6. 應用程式DidReceiveMemoryWarning

這是討論最多的最後一個狀態。如果應用程式不必要地使用了系統資源,它負責在必要時從 iOS 記憶體中刪除該應用程式。我不知道iOS對後台應用程式做了什麼,但如果它需要一個應用程式向其他進程釋放資源,它會提示它釋放它擁有的任何資源,並發出記憶體警告。所以在應用程式中呼叫這個方法。開發人員應該實現它,以便應用程式放棄已分配的內存,保存正在進行的所有內容,從內存中清除不必要的數據,並以其他方式充分釋放內存。確實,許多開發人員,甚至是初學者,都沒有考慮或理解這些事情,然後他們的應用程式可能會威脅電池壽命和/或不必要地消耗系統資源,即使在後台也是如此。

判決書

這六種狀態及其相關方法是iOS中所有「多任務」的背景。這是一個很棒的系統,只要開發人員不忽視這樣一個事實,即需要對應用程式在用戶設備上拋出的內容(如果用戶被最小化或收到系統警告等)負責。

來源: Macworld.com

作者: 雅庫布·波札雷克、馬丁·杜貝克 (ArnieX)

 
您是否也有問題需要解決?您需要建議或尋找合適的應用程式嗎?請隨時透過 部分中的表格與我們聯繫 輔導,下次我們會回答您的問題。

.