Android 五種進程等級

1、foreground process

正處於activity resume狀態
正處於bound服務交互的狀態
正處於服務在前臺運行的狀態(StartForeGround()被調用)
Service生命週期正在被執行(onCreate(),onStart(),onDestroy())
BroadcastReceiver正在執行onReceive()方法
殺死foreground需要用戶響應,因爲這個安全優先級是最高的
是用戶操作所必須的,任一時間下,僅有少數進程會處於前臺,僅當內存實在無法供給它們維持同時運行時纔會被殺死。一般來說,在這種情況下,設備依然處於使用虛擬內存的狀態,必須要殺死一些前臺進程以用戶界面保持響應。

•Android會依據進程中當前活躍組件的重要程度來儘可能高的估量一個進程的級別。比如說,如果一個進程中同時有一個服務和一個可視的activity,則進程會被判定爲可視進程,而不是服務進程。

2、visible process

activity不在前端顯示,但也沒有完全隱藏,能夠看得見,比如彈出一個對話框
一個bound到visible或者foreground的activity的service
沒有前臺組件,但仍可被用戶在屏幕上所見。當滿足如下任一條件時,進程被認爲是可視的:

• 它包含着一個不在前臺,但仍然爲用戶可見的activity(它的onPause()方法被調用)。這種情況可能出現在以下情況:比如說,前臺activity是一個對話框,而之前的 activity位於其下並可以看到。
• 它包含了一個綁定至一個可視的activity的服務。
可視進程依然被視爲是很重要的,非到不殺死它們便無法維持前臺進程運行時,纔會被殺死。

3、Service process

正在運行的,不在上述兩種狀態的service

是 由 startService() 方法啓動的服務,它不會變成上述兩類。儘管服務進程不會直接爲用戶所見,但它們一般都在做着用戶所關心的事情(比如在後臺播放mp3或者從網上下載東 西)。所以系統會盡量維持它們的運行,除非系統內存不足以維持前臺進程和可視進程的運行需要。

4、background process

不可見狀態的activity進程,onstop被調用
包含目前不爲用戶所見的activity(Activity對象的 onStop() 方法已被調用)。這些進程與用戶體驗沒有直接的聯繫,可以在任意時間被殺死以回收內存供前臺進程、可視進程以及服務進程使用。一般來說,會有很多背景進程 運行,所以它們一般存放於一個LRU(最後使用)列表中以確保最後被用戶使用的activity最後被殺死。如果一個activity正確的實現了生命周 期方法,並捕獲了正確的狀態,則殺死它的進程對用戶體驗不會有任何不良影響。

5、empty process

沒有運行任何component的進程,保留這個進程主要是爲了緩存的需要

//此進程/線程相關聯/依賴的組件已經銷燬
不包含任何活動應用程序組件。這種進程存在的唯一原因是做爲緩存以改善組件再次於其中運行時的啓動時間。系統經常會殺死這種進程以保持進程緩存和系統內核緩存之間的平衡。
此外,一個進程的級 別可能會由於其它進程依賴於它而升高。一個爲其它進程提供 服務的進程級別永遠高於使用它服務的進程。比如說,如果A進程中的內容提供者爲進程B中的客戶端提供服務,或進程A中的服務爲進程B中的組件所綁定,則A 進程最低也會被視爲與進程B擁有同樣的重要性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章