螢幕快照 2012-01-08 下午7.12.33.jpg
(photo from thenextweb.com) 

用慣windows的用戶,初次接觸Mac或IOS等裝置時,一定很不適應一點 
就是對於執行過的應用程式,在mac上關閉或在iphone/ipad關閉
你會發現在狀態列或多工列看似還存在

在windows作法,大概就是按下ctrl+del,去kill那些process吧
想說這樣才能釋放記憶體或者省電
若您在ios這樣做,想必不是很瞭解Apple對於多工的定義

國外一位Frasier Speirs做了一個詳細的實驗記錄
它利用監測工具,監測ipad上任何程式的運作
錄製了一段影片,來解說ios多工模式是如何,以下筆者簡述

1.
下圖是該實驗者監測ipad一開始的執行
可以看到右下角區塊,便是在ipad中執行的process
點選的地方正好是springboard,cpu用掉0.2%,記憶體real memory用掉15.86MB
 螢幕快照 2012-01-08 下午7.20.19.jpg  

2.
此時實驗者在多執行了一段影片,名為north korea
CPU一下子衝到75.1%,記憶體佔掉35.85MB
螢幕快照 2012-01-08 下午7.20.43.jpg   

3.
此時按下home鍵,結束該段影片,可以看到如下數據
CPU消耗為0%,但記憶體仍未釋放.這表示該影片是退居幕後停止待命的,但沒有佔用cpu
螢幕快照 2012-01-15 下午8.21.13.jpg   

再把剛剛影片打開,可以發現,影片果真是靜止的
螢幕快照 2012-01-15 下午8.22.11.jpg   

最後若將它從多工列移除呢,那記憶體也跟著釋放了
 

------結論,按下home鍵結束該app,是不會佔用cpu,但記憶體仍會佔住
------想釋放佔住的記憶體,得靠刪除多工列的app 

4.
上面說明,刪除多工列上的app,真可以釋放記憶體
但是真的有必要自己來動手嗎,接下來看一個實驗
首先執行一個game叫做udkgame,如下圖,cpu佔59.5,記憶體佔103MB
螢幕快照 2012-01-15 下午8.34.02.jpg   

在這情況之下,再執行一個game叫做RR2HD
仔細看下圖,原本的UDKGame,cpu目前變為0(因為退居幕後了)
但是記憶體還佔了91.57MB
螢幕快照 2012-01-15 下午8.34.33.jpg   

等到目前執行的RR2HD使用更多記憶體時
原本的UDKGame就自動從process裡面被刪除,釋放更多記憶體出來
螢幕快照 2012-01-15 下午8.34.47.jpg   

------------結論:一旦記憶體不夠用,ios是能夠自動釋放調整的

5.
最後一個實驗,若執行下載任務或者導航呢?
這類下載,理論上需要背景執行的
因此實驗者,特地去下載一個podcast,再來觀察看看記憶體狀態
下圖啟動instacastHD這個下載任務,已經看出開始下載了
螢幕快照 2012-01-15 下午8.30.45.jpg   

暫時按下home鍵呢
可以從下圖看到,instacastHD的cpu仍然有在進行,這就是差別了,表示有在背後下載
螢幕快照 2012-01-15 下午8.30.54.jpg   

最後下載完成呢
如下圖,instacastHD的cpu已經不再佔用,只有記憶體尚未卸載而已
螢幕快照 2012-01-15 下午8.31.44.jpg   

--------結論,背景執行的APP,在執行當中仍會使用cpu,除非任務結束才自動釋放

------------------jimgau's comment

從上面可以得到幾個重點
1.
作用中的App,按下home鍵,是會退居幕後,佔少量記憶體,但不損耗CPU運算
2.
該停用的APP,算是靜止狀態
3.
一旦月多APP執行記憶體不夠用時,ios就會自動調節,甚至釋放記憶體
4.
對於背景執行的APP(例如下載動作),按下home鍵仍會損耗cpu跟記憶體
一旦結束任務,就會自動釋放cpu

簡單的說,ios的多工是會自動調節的
真的不需要手工去release

看一下完整的實驗影片

[參考來源]

iOS Multitasking from Fraser Speirs on Vimeo.

jimgau 發表在 痞客邦 PIXNET 留言(0) 人氣()