在 Android 中,多數狀況下每一個程序都是在各自獨立的 Linux 進程中運行的。當一個程序或其某些部分被請求時,它的進程就「出生」了;當這個程序沒有必要再運行下去且系統須要回收這個進程的內存用於其餘程序時,這個 進程就「死亡」了。能夠看出,Android 程序的生命週期是由系統控制而非程序自身直接控制。這和咱們編寫桌面應用程序時的思惟有一些不一樣,一個桌面應用程序的進程也是在其餘進程或用戶請求時被創 建,可是每每是在程序自身收到關閉請求後執行一個特定的動做(好比從 main 函數中 return)而致使進程結束的。要想作好某種類型的程序或者某種平臺下的程序的開發,最關鍵的就是要弄清楚這種類型的程序或整個平臺下的程序的通常工做 模式並熟記在心。在 Android 中,程序的生命週期控制就是屬於這個範疇——個人我的理解:)html
在 Android 系統中,當某個 activity調用 startActivity(myIntent) 時,系統會在全部已經安裝的程序中尋找其 intent filter 和 myIntent 最匹配的一個 activity,啓動這個進程,並把這個 intent 通知給這個 activity。這就是一個程序的「生」。好比咱們在 Home application 中選擇 「Web browser」,系統會根據這個 intent 找到並啓動 Web browser 程序,顯示 Web browser 的一個 activity 供咱們瀏覽網頁(這個啓動過程有點相似咱們在在我的電腦上雙擊桌面上的一個圖標,啓動某個應用程序)。在 Android 中,全部的應用程序「生來就是平等的」,因此不光 Android 的核心程序甚至第三方程序也能夠發出一個 intent 來啓動另一個程序中的一個 activity。Android 的這種設計很是有利於「程序部件」的重用。android
一個 Android 程序的進程是什麼時候被系統結束的呢?通俗地說,一個即將被系統關閉的程序是系統在內存不足(low memory)時,根據「重要性層次」選出來的「犧牲品」。一個進程的重要性是根據其中運行的部件和部件的狀態決定的。各類進程按照重要性從高到低排列如 下:
1. 前臺進程。這樣的進程擁有一個在屏幕上顯示並和用戶交互的 activity 或者它的一個IntentReciver 正在運行。這樣的程序重要性最高,只有在系統內存很是低,萬不得已時纔會被結束。
2. 可見進程。在屏幕上顯示,可是不在前臺的程序。好比一個前臺進程以對話框的形式顯示在該進程前面。這樣的進程也很重要,它們只有在系統沒有足夠內存運行全部前臺進程時,纔會被結束。
3. 服務進程。這樣的進程在後臺持續運行,好比後臺音樂播放、後臺數據上傳下載等。這樣的進程對用戶來講通常頗有用,因此只有當系統沒有足夠內存來維持全部的前臺和可見進程時,纔會被結束。
4. 後臺進程。這樣的程序擁有一個用戶不可見的 activity。這樣的程序在系統內存不足時,按照 LRU 的順序被結束。
5. 空進程。這樣的進程不包含任何活動的程序部件。系統可能隨時關閉這類進程。程序員
從某種意義上講,垃圾收集機制把程序員從「內存管理噩夢」中解放出來,而 Android 的進程生命週期管理機制把用戶從「任務管理噩夢」中解放出來。我見過一些 Nokia S60 用戶和 Windows Mobile 用戶要麼由於長期不關閉多餘的應用程序而致使系統變慢,要麼由於不時查看應用程序列表而影響使用體驗。Android 使用 Java 做爲應用程序 API,而且結合其獨特的生命週期管理機制同時爲開發者和使用者提供最大程度的便利。app
Activity lifecycle
Activity有三種基本狀態:
Active:處於屏幕前景(當前task的棧頂Activity處於Active狀態),同一時刻只能有一個Activity處於Active狀態;
Paused狀態:處於背景畫面畫面狀態,失去了焦點,但依然是活動狀態;
stopped:不可見,但依然保持全部的狀態和內存信息。函數
能夠調用finish()結束處理Paused或者stopped狀態的Activity。
各類狀態之間經過下列的函數調用轉換:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
Activity的生命週期能夠分爲三組:
The entire lifetime of an activity happens between the first call toonCreate()through to a single final call toonDestroy()
. The visible lifetime of an activity happens between a call toonStart()until a corresponding call to onStop()
. The foreground lifetime of an activity happens between a call to onResume()until a corresponding call toonPause()
. google