標籤:
開啟應用:onCreate()->onStart()->onResume
BACK鍵:onPause()->onStop()->onDestory()
HOME鍵:onPause()->onStop()
再次啟動:onRestart()->onStart()->onResume()
三個嵌套迴圈
1.整體生命週期:onCreate-> ... ... -> onDestroy。
2.可視生命週期:onStop-> ... ... -> onPause。
3.焦點生命週期:onPause-> onResume。
四個階段
1.開始Activity:在這個階段依次執行3個生命週期方法:onCreate、onStart和onResume。
2.Activity失去焦點:如果在Activity獲得焦點的情況下進入其他的Activity或應用程式,這時當前的Activity會失去焦點。在這一階段,會依次執行onPause和onStop方法。
3.Activity重新獲得焦點:如果Activity重新獲得焦點,會依次執行3個生命週期方法:onRestart、onStart和onResume。
4.關閉Activity:當Activity被關閉時系統會依次執行3個生命週期方法:onPause、onStop和onDestroy。
七個方法
1.void onCreate(Bundle savedInstanceState)
當Activity被第首次載入時執行。我們新啟動一個程式的時候其主表單的onCreate事件就會被執行。如果Activity被銷毀後(onDestroy後),再重新載入進Task時,其onCreate事件也會被重新執行。注意這裡的參數savedInstanceState(Bundle類型是一個索引值對集合,大家可以看成是.Net中的Dictionary)是一個很有用的設計,由於前面已經說到的手機應用的特殊性,一個Activity很可能被強制交換到後台(交換到後台就是指該表單不再對使用者可見,但實際上又還是存在於某個Task中的,比如一個新的Activity壓入了當前的Task從而“遮蓋”住了當前的Activity,或者使用者按了Home鍵回到案頭,又或者其他重要事件發生導致新的Activity出現在當前Activity之上,比如來電介面),而如果此後使用者在一段時間內沒有重新查看該表單(Android通過長按Home鍵可以選擇最近啟動並執行6個程式,或者使用者直接再次點擊程式的運行表徵圖,如果表單所在的Task和進程沒有被系統銷毀,則不用重新載入,直接重新顯示Task頂部的Activity,這就稱之為重新查看某個程式的表單),該表單連同其所在的Task和Process則可能已經被系統自動銷毀了,此時如果再次查看該表單,則要重新執行onCreate事件初始化表單。而這個時候我們可能希望使用者繼續上次開啟該表單時的操作狀態進行操作,而不是一切從頭開始。例如使用者在編輯簡訊時突然來電,接完電話後使用者又去做了一些其他的事情,比如儲存來電號碼到連絡人,而沒有立即回到簡訊編輯介面,導致了簡訊編輯介面被銷毀,當使用者重新進入簡訊程式時他可能希望繼續上次的編輯。這種情況我們就可以覆寫Activity的voidonSaveInstanceState(BundleoutState)事件,通過向outState中寫入一些我們需要在表單銷毀前儲存的狀態或資訊,這樣在表單重新執行onCreate的時候,則會通過savedInstanceState將之前儲存的資訊傳遞進來,此時我們就可以有選擇的利用這些資訊來初始化表單,而不是一切從頭開始。
2.void onStart() activity變為在螢幕上對使用者可見時調用。
onCreate事件之後執行。或者當前表單被交換到後台後,在使用者重新查看表單前已經過去了一段時間,表單已經執行了onStop事件,但是表單和其所在進程並沒有被銷毀,使用者再次重新查看表單時會執行onRestart事件,之後會跳過onCreate事件,直接執行表單的onStart事件。
3.void onResume() activity開始與使用者互動時調用(無論是啟動還是重新啟動一個活動,該方法總是被調用的)。
onStart事件之後執行。或者當前表單被交換到後台後,在使用者重新查看表單時,表單還沒有被銷毀,也沒有執行過onStop事件(表單還繼續存在於Task中),則會跳過表單的onCreate和onStart事件,直接執行onResume事件。
4.void onPause() activity被暫停或收回cpu和其他資源時調用,該方法用於儲存活動狀態的,也是保護現場,壓棧吧!
表單被交換到後台時執行。
5.void onStop() activity被停止並轉為不可見階段及後續的生命週期事件時調用。
onPause事件之後執行。如果一段時間內使用者還沒有重新查看該表單,則該表單的onStop事件將會被執行;或者使用者直接按了Back鍵,將該表單從當前Task中移除,也會執行該表單的onStop事件。
6.void onRestart() 重新啟動activity時調用。該活動仍在棧中,而不是啟動新的活動。
onStop事件執行後,如果表單和其所在的進程沒有被系統銷毀,此時使用者又重新查看該表單,則會執行表單的onRestart事件,onRestart事件後會跳過表單的onCreate事件直接執行onStart事件。
7.void onDestroy() activity被完全從系統記憶體中移除時調用,該方法被調用可能是因為有人直接調用onFinish()方法或者系統決定停止該活動以釋放資源!
Activity被銷毀的時候執行。在表單的onStop事件之後,如果沒有再次查看該表單,Activity則會被銷毀。
1.onCreate:當活動第一次啟動的時候,觸發該方法,可以在此時完成活動的初始化工作。
onCreate方法有一個參數,該參數可以為空白( null),也可以是之前調用 onSaveInstanceState()方法儲存的狀態資訊。
2.onStart:該方法的觸發表示所屬活動將被展現給使用者。
3.onResume:當一個活動和使用者發生互動的時候,觸發該方法。
4.onPause:當一個正在前台啟動並執行活動因為其他的活動需要前台運行而轉入後台啟動並執行時候,觸發該方法。這時候需要將活動的狀態持久化,比如正在編輯的資料庫記錄等。
5.onStop:當一個活動不再需要展示給使用者的時候,觸發該方法。如果記憶體緊張,系統會直接結束這個活動,而不會觸發onStop 方法。所以儲存狀態資訊是應該在onPause時做,而不是onStop時做。活動如果沒有在前台運行,都將被停止或者Linux管理進程為了給新的活動預留足夠的儲存空間而隨時結束這些活動。因此對於開發人員來說,在設計應用程式的時候,必須時刻牢記這一原則。在一些情況下,onPause方法或許是活動觸發的最後的方法,因此開發人員需要在這個時候儲存需要儲存的資訊。
6.onRestart:當處於停止狀態的活動需要再次展現給使用者的時候,觸發該方法。
7.onDestroy:當活動銷毀的時候,觸發該方法。和 onStop方法一樣,如果記憶體緊張,系統會直接結束這個活動而不會觸發該方法。
8.onSaveInstanceState:系統調用該方法,允許活動儲存之前的狀態,比如說在一串字串中的游標所處的位置等。
通常情況下,開發人員不需要重寫覆蓋該方法,在預設的實現中,已經提供了自動儲存活動所涉及到的使用者介面組件的所有狀態資訊。
android監聽事件添加動作的三種方式
第一種也是最開始就接觸的方式,通常在activity組件的oncreate事件中直接定義,直接動作。這種方式每個控制項都定義一次,通常不方便。
Buttonbtn = (Button) findViewById(R.id.myButton);
btn.setOnClickListener(newView.OnClickListener(){
publicvoid onClick(View v){
//dosomething
}
});
第二種通常是在activity組件實現其介面,這樣可以多外控制項共用一個介面,這樣相對方便。
publicclass My Activity extends Activity implements View.OnClickListener{
@Override
publicvoid onClick(View v){
switch(v.getId()){
}
}
}
第三種類似第二種,定義一個具體的執行個體,這樣的好處在於如果需要實現多個監聽介面,這樣更清晰。
classMyClickListener implements View.OnClickListener
@Override
publicvoid onClick(View v) {
switch(v.getId()) {
}
}
}
android-生命週期介紹