iOS後台執行機制

2021-06-29 10:27:25 字數 1582 閱讀 3942

除了上述四項後台功能,系統還提供乙個程式快速切換的功能,這個功能也算是ios多工的一部分。個人觀點,這個功能是ios多工中最先進最有用的功能。它讓程式在最小化的時候僅僅是暫停執行,但並不釋放記憶體,保持程式當前的狀態,這樣當你再次開啟這個程式的時候,程式不需要重新從硬碟(快閃儲存器)中讀出,不需要重新load資料,而是瞬間恢復到上次退出程式時的狀態,這個特性會給使用者很強的多工的感覺,彷彿程式從來沒有退出過一樣。而這個功能所花費的代價只是一塊記憶體,而並不消耗cpu時間。什麼意思呢?就是說快速切換並不比退出程式多耗一絲電,相反,由於再次開啟程式的時候不需要讀硬碟(快閃儲存器),它比退出程式再重新啟動更省電!

第一點是:為快速切換所保留的記憶體空間是可以被擠占的。ios是沒有記憶體交換空間的,它不會像windows那樣把硬碟(快閃儲存器)虛擬成記憶體來建立乙個對應用程式來說無限的虛擬記憶體空間。所以,在ios中,當前臺程式記憶體空間不足的時候,系統會釋放掉為後台程式保留的用於快速切換的記憶體,提供給前台程式使用。當然,如果所有能釋放的記憶體都釋放了,還不能滿足前台程式的記憶體要求的話,系統會直接中止前台程式的執行,這就是我們為什麼會看到有些程式執行中無故退出的原因。用於快速切換的記憶體可以被擠占這個特性是很先進的記憶體動態管理方式,特別適合於記憶體資源緊張的移動裝置。這種記憶體管理策略的優點是在幾乎不消耗任何額外的時間(cpu時間,程式在後台暫停)、空間(記憶體空間,可以被擠占)資源的情況下,可以提供乙個效能優良的偽多工環境。但是正因為快速切換的記憶體可以被擠占,所以它的缺點就是它不總是可用的。大家都有經驗開啟safari的時候,有時能夠直接顯示上次退出時候的網頁,有時候就需要重新載入,就是這個原因。

關於快速切換我們需要知道的另外一點是,在每個程式最小化的時候,系統都會給程式傳送乙個通知,告訴程式你現在已經被最小化了。這時候乙個優雅、精良的程式會釋放掉可以釋放的一部分無關緊要的空間以節省記憶體,比如畫面快取。這個特性的意思是支援ios多工的程式被快速切換到後台以後占用的記憶體空間會比在前台執行時少。

越獄後的ios安裝backgrounder可以實現真後台,backgrounder是乙個對ios行為影響巨大的程式,越獄之後費電厲害的一大半原因是因為這個程式。backgrounder的真後台的操作方式就是在程式最小化的時候不給程式傳送這個最小化的通知,所以程式不知道自己已經在後台了,不僅是仍然占用和在前台時一樣多的記憶體,而且還在繼續執行,和在前台時一樣燒電。而除了幾個作業系統底層的精靈程序之外,所有程式在ios的原生後台狀態下都是暫停執行的,不燒電的。不僅如此,就算是已經在後台的程式,如果它支援ios多工,那麼它在收到系統發出的記憶體不足通知的時候,它還可以繼續釋放更多記憶體。比如safari,在剛最小化的時候,它是保留所有開啟的網頁的,之後如果系統發出記憶體不足通知,safari就可以乙個乙個地釋放已開啟的網頁所占用的記憶體。

ios應用在後台執行也是ios應用生命週期的乙個部分,一般提到ios的後台管理機制,更像是在描述乙個ios應用進入後台後的狀態。

先上一張官方文件的圖:

我在 ios 究竟在何時關閉後台程式? - cerulean 的回答 這個問題裡的**用於應用進入後台後多向ios申請約10分鐘的時間可以做其他的事情。這個時候程式在後台是可以執行**的,也有一些方法可以讓應用一直保持在這個狀態,比如放一段很長時間的空歌曲等等。

IOS後台執行機制 與 動作

注 應用從froeground切換到background只有在支援多工並且執行ios4.0或更新版本系統的裝置上才會發生。所有其它的情況,應用不是切向後台,而是直接終止,並且從記憶體中清除。應用切向後台background時應該做什麼 2 儲存使用者資料和應用狀態資訊。所有沒有儲存的改變都應該在切向...

IOS後台執行機制 與 動作

注 應用從froeground切換到background只有在支援多工並且執行ios4.0或更新版本系統的裝置上才會發生。所有其它的情況,應用不是切向後台,而是直接終止,並且從記憶體中清除。應用切向後台background時應該做什麼 2 儲存使用者資料和應用狀態資訊。所有沒有儲存的改變都應該在切向...

iOS之runtime執行機制初探

近有個新入職的同事問我關於 runtime機制 的問題,我想可能很多人對這個都不是太清楚,在這裡,和大家分享一下我對於runtime機制的理解。要深入理解runtime,首先要從最基本的類與物件開始,本文將詳細講解oc中類與物件的結構層次,後續將逐漸更新如何利用runtime操作類。所謂runtim...