Android應用程序入門到精通
可視進程是持有一個被用戶可見, 但沒有顯示在最前端 (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提供的接口與它進行通訊。拿媒體播放器這個例子來說,我們還可以進行暫停、重播等操作。
【編輯推薦】