程式的生命周期是在Android系統中程序從啟動到終止的所有階段,也就是Android從啟動到停止的全過程。程式的生命周期是由Android作業系統進行控制和排程的。
一、Android應用程式的生命周期
Android程序的優先級:
前台程序==》可見程序 ==》服務程序==》背景程序==》空程序
說明:
①前台程序
是Android系統中最重要的程序,是與使用者正在進行互動的程序。有以下四種情況:
- Activity正在與使用者進行互動
- 程序被Activity調用,而且這個程序正在與使用者進行互動
- 程序服務正在執行聲明中的回調函數,如OnCreate()、OnStart()OnDestroy()
- 程序的BroadCastReceiver在執行OnReceive()函數
Android系統在多個前台程序同時運作時,可能會出現資源不足的情況,此時會清除部分前台程序,保證主要的使用者界面能夠及時響應。
②可見程序
是指部分程式界面能夠被使用者看見,卻不在前台與使用者互動,不影響界面事件的程序。
如果一個程序包含服務,且這個服務正被使用者可見的Activity調用,此程序同樣被視為可見程序。
Androdi程序一般存在少量的可見程序,隻有在特殊情況下,Android系統才會為保證前台程序的資源而清除可見程序。
③服務程序
服務程序是指包含已啟動服務的程序。特點如下:
- 沒有使用者界面
- 在背景長期運作
Android系統除非不能保證前台程序和可見程序所必要的資源,否則不強行清除服務程序。
④背景程序
背景程序是指不包括任何已經啟動的服務,而其沒有任何使用者可見的Activity的程序
Android系統中一般存在數量較多的背景程序,在系統資源緊張時,系統将優先清除使用者較長時間沒有見到的背景程序
⑤空程序
空程序是不包含任何活躍元件的程序
空程序在系統緊張時會被首先清除。但為了提高Android應用程式的啟動速度,Android系統會将空程序儲存在系統記憶體用,在使用者重新啟動該程式時,空程序會被重新使用。
除了以上優先級以外,以下兩個方面也決定了優先級:
- 程序的優先級取決于所有元件中優先級最高的部分
- 程序的優先級會根據其他程序的依賴關系而變化
從某種意義上講,垃圾收集機制把程式員從“記憶體管理噩夢”中解放出來,而 Android 的程序生命周期管理機制把使用者從“任務管理噩夢”中解放出來。一些 Nokia S60 使用者和 Windows Phone 使用者要麼因為長期不關閉多餘的應用程式而導緻系統變慢,要麼因為不時檢視應用程式清單而影響使用體驗。Android 使用 Java 作為應用程式 API,并且結合其獨特的生命周期管理機制同時為開發者和使用者提供最大程度的便利。 二、Android元件
1、元件是可以調用的基本功能子產品,Android應用程式是由元件組成的。
2、Android系統四個元件:Activity,Service,BroadCastReceiver, ContentProvider
三、Activity 1、什麼是Activity 簡單的說,Activity就是布滿整個視窗或者懸浮于其他視窗上的互動界面,一個應用程式中通常由多個Activity構成。 當程式第一次運作時使用者就會看這個Activity,這個Activity可以通過啟動其他的Activity進行相關操作。 當啟動其他的Activity時這個目前的這個Activity将會停止,新的Activity就會壓入棧中,同時擷取使用者焦點,這時就可在這個Activity上操作了。 都知道棧是先進後出的原則,那麼當使用者按Back鍵時,目前的這個Activity銷毀,前一個Activity重新恢複。 2、 Activity生命周期 ①、Activity生命周期是指Activity從啟動到銷毀的過程 ②、Activity表現為四種狀态:
- 活動狀态(Active):Activity在使用者界面中處于最上層,完全能被使用者看到,能夠與使用者進行互動
- 暫停狀态(Paused):Activity界面上被部分遮擋,該Activity不再處于使用者界面的最上層,且不能夠與使用者進行互動
- 停止狀态(Stopped):Activity在界面上完全不能被使用者看到,也就是說這個Activity被其他Activity全部遮擋
- 非活動狀态(Dead):不在這三種狀态中的Activity則處于非活動狀态
③、 Activity的整個生命周期都定義在下面的接口方法中,所有方法都可以被重載。所有的Activity都需要實作 onCreate(Bundle)去初始化設定,大部分Activity需要實作onPause()去送出更改過的資料,目前大部分的Activity也需要實作onFreeze()接口,以便恢複在onCreate(Bundle)裡面設定的狀态。

七個方法詳細介紹如下:
- onCreate():
當activity是被建立時候,會自動運作該方法。該方法做一些初始化動作,比如建立views,設定資料到list等等,該方法提供了一個Bundle類型的變量,該變量中有這個activity以前的狀态資訊,前提是以前存過這些資訊。這個方法執行完後執行的是onStart()方法;若在onCreate方法中加入finish()方法,onCreate下一個運作onDestroy方法
- onRestart():
把activity從onStop狀态喚醒時,會用onRestart方法,該方法優先于再次運作的onStart,運作完onRestart之後運作onStart。若在onRestart()方法中加入finish()語句,則還是會繼續運作onStart及後面的狀态方法直到onDestroy運作完
- onStart():
當activity對使用者可見時會調用onStart,當activity在前台顯示時,會運作onResume;當activity還沒在前台顯示就被隐藏(停止狀态)了會運作onStop(),比如在onStart方法中用了finish()方法的話,onStart()之後就會直接運作onStop->onDestroy。
- onResume():
當activity開始與使用者互動時,會調用onResume,并且為了使用者操作此時該activity位于activity棧的頂部。經過某些操作後該方法執行完後執行的是onPause()
- onPause():
當一個activity運作到onResume方法後,不管是這個activity要銷毀還是要暫停或停止,都會調用該方法。這個方法之後有可能是onResume也有可能是onStop,若是在這個activity-A中打開一個不完全覆寫這個activity-A的新activity-B,那麼activity-A就會是onPause狀态,當activity-B退出時,activity-A就直接運作onResume(前提是onPause的方法執行完了,否則會等onPause方法執行完後才運作onResume方法,是以不建議在這個方法中執行CPU密集的操作)。若是需要退出activity-A,那麼下一個就會執行onStop。onPause()用于送出未儲存發生變化了的持久化資料,及停止動畫及其他其他比較消耗CPU的事件(比如廣播接收器,傳感器(比如GPS),或者消耗電量的資源),這是為了更好的運作新的activity
- onStop():
當這個activity完全看不見的時候,會調用onStop方法,因為另一個activity會調用onResume并且覆寫這個activity。以下三種情況都會使這個activity調用onStop()方法,第一種是一個新的activity被執行,第二種是一個已經存在的activity被切換到最前端,第三種是這個activity要被銷毀。如果通過使用者召回這個activity,那麼會調用onRestart方法;若這個activity要被銷毀,則調用onDestroy方法
- onDestroy():
當activity銷毀前會調用該方法,比如發生如下情況:activity調用了finish()方法來結束這個activity,或者因為系統為了節省空間而臨時銷毀這個activity,這兩個情況可以通過isFinishing()方法判斷
- 總結:
當使用者自己退出程式的時候,建議在onStop方法中儲存資料。
④、Activity的三個階段:
- 開始Activity:在這個階段依次執行3個生命周期方法:onCreate、onStart和onResume。
- Activity重新獲得焦點:如果Activity重新獲得焦點,會依次執行3個生命周期方法:onRestart、onStart和onResume。
- 關閉Activity:當Activity被關閉時系統會依次執行3個生命周期方法:onPause、onStop和onDestroy。
參考資料: http://blog.csdn.net/g1036583997/article/details/20709495
http://www.bdqn.cn/news/201312/12260.shtml