可視進程是持有一個被使用者可見, 但沒有顯示在最前端 (onPause方法被調用時) 的Activity的進程. 舉例來說, 這種進程通常出現在一個前端Activity以一個對話方塊出現並保持前一個Android應用程式可見時。
這種進程被系統認為是極其重要的, 並且通常不會被殺掉, 除非為了保持所有前端進程正常運行不得不殺掉這些可見進程。服務進程是持有一個Service的進程, 該Service是由startService()方法啟動的, 儘管這些進程使用者不能直接看到, 但是通常他們做的工作使用者是十分關注的(例如, 在背景播放mp3或是在後台下載 上傳檔案)。
所以, 除非為了保持所有的前端進程和可視進程正常運行外, 系統是不會殺掉服務進程的。後台進程是持有一個不再被使用者可見的Activity(onStop()方法被調用時)的進程. 這些進程不會直接影響使用者體驗. 加入這些進程已經完整的。
正確的完成了自己的生命週期(訪問Activity查看更多細節), 系統會在為前三種進程釋放記憶體時隨時殺掉這些後台進程. 通常會有很多的後台進程在運行, 所以這些進程被存放在一個LRU列表中, 以保證在低記憶體的時候, 最近一個被使用者看到的進程會被最後殺掉。
空進程是沒有持有任何活動應用組件的進程. 保留這種進程的唯一理由是為了提供一種緩衝機制, 縮短他的應用下次運行時的啟動時間。就其本身而言, 系統殺掉這些進程的目的是為了在這些空進程和底層的核心緩衝之間平衡整個系統的資源.
當需要給一個進程分類的時候。系統會在該進程中處於活動狀態的所有組件裡掉選一個重要等級最高作為分類依據. 查看Activity, Service,和IntentReceiver的文檔。瞭解每個組件在進程整個生命週期中的貢獻。
每一個classes的文檔詳細描述他們在各自應用的生命週期中所起得作用。 但是,並不是每一個Android應用程式都需要這四種構造塊,這不是必須的,某些時候,我們只需要這四種中的幾種組合成我們的應用。
當我們明確了我們的應用需要哪些構造塊後,我們就需要在AndroidManifest.xml中登記這些構造塊的清單。這是一個XML設定檔。這個設定檔用於定義我們的應用程式的組件、組件的功能及必要條件等。這個設定檔是每個Android應用必需的。對於AndroidMainfest.xml的Schema,參考SDK包附帶的文檔。
一個Service是一段長生命週期的,Android應用程式沒有使用者介面的程式。比較好的一個例子就是一個正在從播放清單中播放歌曲的媒體播放器。在一個媒體播放器的應用中,應該會有多個activity,讓使用者可以選擇歌曲並播放歌曲。然而,音樂重放這個功能並沒有對應的activity,因為使用者當然會認為在導航到其它螢幕時音樂應該還在播放的。
在這個例子中,媒體播放器這個activity會使用Context.startService()來啟動一個service,從而可以在後台保持音樂的播放。同時,系統也將保持這個service一直執行,直到這個service運行結束。
另外,我們還可以通過使用Context.bindService()方法,串連到一個service上如果這個service還沒有運行將啟動它)。當串連到一個service之後,我們還可以service提供的介面與它進行通訊。拿媒體播放器這個例子來說,我們還可以進行暫停、重播等操作。