簡介
當一個程式第一次啟動的時候,Android會啟動一個LINUX進程和一個主執行緒。默認的情況下,所有該程式的組件都將在該進程和執行緒中運行。同時,Android會為每個應用程式分配一個單獨的LINUX用戶。Android會儘量保留一個正在運行進程,注意,進程里包含執行緒,只在記憶體資源出現不足時,Android會嘗試停止一些進程從而釋放足夠的資源給其他新的進程使用,也能保證用戶正在訪問的當前進程有足夠的資源去及時的回響用戶的事件。Android會根據進程中運行的組件類別以及組件的狀態來判斷該進程的重要性,Android會首先停止那些不重要的進程。按照重要性從高到低一共有五個級別:
功能特點
前台進程
前台進程是用戶當前正在使用的進程。只有一些前台進程可以在任何時候都存在。他們是最後一個被結束的,當記憶體低到根本連他們都不能運行的時候。一般來說,在這種情況下,設備會進行記憶體調度,中止一些前台進程來保持對用戶互動的回響。
可見進程
可見進程不包含前台的組件但是會在螢幕上顯示一個可見的進程是的重要程度很高,除非前台進程需要獲取它的資源,不然不會被中止。
服務進程
運行著一個通過startService()方法啟動的service,這個service不屬於上面提到的2種更高重要性的。service所在的進程雖然對用戶不是直接可見的,但是他們執行了用戶非常關注的任務(比如播放MP3,從網路下載數據)。只要前台進程和可見進程有足夠的記憶體,系統不會回收他們。
後台進程
運行著一個對用戶不可見的activity(調用過onStop()方法).這些進程對用戶體驗沒有直接的影響,可以在服務進程、可見進程、前台進程需要記憶體的時候回收。通常,系統中會有很多不可見進程在運行,他們被保存在LRU(leastrecentlyused)列表中,以便記憶體不足的時候被第一時間回收。如果一個activity正確的執行了它的生命周期,關閉這個進程對於用戶體驗沒有太大的影響。
空進程
未運行任何程式組件。運行這些進程的唯一原因是作為一個快取,縮短下次程式需要重新使用的啟動時間。系統經常中止這些進程,這樣可以調節程式快取和系統快取的平衡。
Android對進程的重要性評級的時候,選取它最高的級別。另外,當被另外的一個進程依賴的時候,某個進程的級別可能會增高。一個為其他進程服務的進程永遠不會比被服務的進程重要級低。因為服務進程比後台activity進程重要級高,因此一個要進行耗時工作的activity最好啟動一個service來做這個工作,而不是開啟一個子進程――特別是這個操作需要的時間比activity存在的時間還要長的時候。例如,在後台播放音樂,向網上上傳攝像頭拍到的圖片,使用service可以使進程最少獲取到“服務進程”級別的重要級,而不用考慮activity目前是什麼狀態。broadcastreceivers做費時的工作的時候,也應該啟用一個服務而不是開一個執行緒。