標籤:
(1)前台(Foreground)進程
與使用者當前正在做的事情密切相關,不同的應用程式組件能夠通過不同的方法使它的宿主進程移到前台。當下面任何一個條件滿足時,都可以考慮將進程移到前台。
進程正在螢幕的最前端運行一個與使用者互動的Activity(它的onResume()方法被調用);
進程有一個正在啟動並執行BroadcastReceiver(它的BroadcastReceiver.onReceive()方法正在執行);
進程有一個Service,並且在Service的某個方法(Service.onCreate()、Service.onStart()或者Service.onDestroy())內有正在執行的代碼。
(2)可見(Visible)進程
它有一個可以被使用者從螢幕上看到的Activity,但不在前台——其onPause()方法被調用。例如:如果前台的Activity是一個對話方塊,以前的Activity隱藏在對話方塊之後,就可能出現這種進程。這樣的進程很重要,一般不允許被殺死,除非為了保證前台進程的運行不得不這樣做。
(3)服務(Service)進程
有一個已經用startService() 方法啟動的Service,雖然這些進程使用者無法直接看到,但它們做的事情卻是使用者所關心的(例如:後台MP3回放或後台網路資料的上傳/下載)。因此,系統將一直運行這些進程,除非記憶體不足以維持所有的前台進程和可見進程。
(4)後台(Background)進程
擁有一個目前使用者看不到的Activity(它的onStop()方法被調用),這些進程對使用者體驗沒有直接的影響。如果它們正確執行了Activity生命週期,系統可以在任意時刻殺死進程來回收記憶體,並提供給前面3種類型的進程使用。系統中通常有很多這樣的進程在運行,因此要將這些進程儲存在LRU 列表中,以確保當記憶體不足時使用者最近看到的進程最後一個被殺死。
(5)空(Empty)進程
不包含任何處於活動狀態的應用程式組件。保留這種進程的唯一原因是,當下次應用程式的某個組件需要運行時,不需要重新建立進程,這樣可以提高啟動速度。
以上所說的“進程”是從系統啟動並執行角度考慮的,各種不同的進程可以理解成Android的各種組件的不同狀態機器(state machine)。如果從應用程式的代碼以及運行情況考慮,可以關注Android的各種組件相對應的生命週期。
安卓應用程式的生命週期