更快更好的學習Android進程
Android是基于Linux內核的軟件平臺和操作系統,是由2007年由Google開發而成,希望借助建立標準化、開放式的移動電話軟件平臺,在移動產業內形成一個開放式的生態系統。
Android盡量不去中止一個進程,但是當內存不足的時候它必須中止一些老的線程。為了決定哪些進程保留哪些進程中止,Android給這些進程一個“重要級”,這個級別取決于進程中的組件和組件的狀態。最不重要的進程先被中止,然后是次不重要的,依此類推。重要級別有5個程度,以下詳細說明:
1.有一個用戶正在交互的activity, (Activity對象的onResume()方法被調用). 有一個響應用戶正在交互的activity的sercie.有一個 Service 對象正在執行生命周期的方法 (onCreate(), onStart(), or onDestroy()).有一個 BroadcastReceiver 對象在執行onReceive() 方法。
只有一些前臺Android進程可以在任何時候都存在。他們是***一個被結束的――當內存低到根本連他們都不能運行的時候。一般來說,在這種情況下,設備會進行內存調度,中止一些前臺進程來保持對用戶交互的響應。.
2.見進程不包含前臺的組件但是會在屏幕上顯示。如果滿足了以下任意一個條件,進程就可以視為可見:有一個非前臺的但是仍然對用戶可見的activity。( onPause() 方法被調用). 這種情況發生于,例如,當前前臺的activity是一個對話框,上一個activity還是可見的。 具有一個綁定到可見activity的service。一個可見的進程是的重要程度很高,除非前臺進程需要獲取它的資源,不然不會被中止。
3.服務進程 中運行著一個通過 startService() 方法啟動的service,這個service不屬于上面提到的2種更高重要性的,service所在的進程雖然對用戶不是直接可見的,但是他們執行了用戶非常關注的任務(比如播放mp3,從網絡下載數據)。只要前臺進程和可見進程有足夠的內存,系統不會回收他們。
4.后臺進程 中運行著一個對用戶不可見的activity(調用過 onStop() 方法).這些進程對用戶體驗沒有直接的影響,可以在服務進程、可見進程、前臺進程需要內存的時候回收。通常。
系統中會有很多不可見進程在運行,他們被保存在LRU (least recently used) 列表中,以便內存不足的時候被***時間回收。如果一個activity正確的執行了它的生命周期,關閉這個Android進程對于用戶體驗沒有太大的影響。
5.空進程 中未運行任何程序組件。運行這些進程的唯一原因是作為一個緩存,縮短下次程序需要重新使用的啟動時間。系統經常中止這些進程,這樣可以調節程序緩存和系統緩存的平衡。.Android進程的重要性評級的時候,選取它***的級別。例如一個進程中有一個service和可以可見的activity,則Android將此進程評判為“可見進程”而非“服務進程。”
另外,當被另外的一個進程依賴的時候,某個進程的級別可能會增高。一個為其他進程服務的進程永遠不會比被服務的進程重要級低。例如,進程A中的content provider 正在為客戶進程B提供數據,或者A中的service綁定到進程B中,那么A的重要級最少都是B的重要級。
因為服務進程比后臺activity進程重要級高,因此一個要進行耗時工作的acitvity***啟動一個service來做這個工作。而不是開啟一個子進程――特別是這個操作需要的時間比activity存在的時間還要長的時候。例如,在后臺播放音樂,向網上上傳攝像頭拍到的圖片。
使用service可以使進程最少獲取到“Android進程”級別的重要級,而不用考慮acrivity目前是什么狀態。向 Broadcast receiver lifecycle 章節講到的, broadcast receivers做費時的工作的時候,也應該啟用一個服務而不是開一個線程。
【編輯推薦】