Android中的Activity生命週期
說到生命週期,對於程式設計師來說並不陌生。如果學過Servlet的朋友,就更不會陌生了餓,其實差不多,android的生命週期與Servlet的生命週期有相似之處 。
Android的生命週期通常是有這樣幾個方法構成:onCreate()、onStart()、onPause()、onResume()、onStop()、onDestroy()、onRestart()等七個。也許大家還不清楚我們為什麼要知道android的生命週期,也許大家這麼認為,我管它是什麼,我知道每次寫Activity時總是在onCreate()中,最終也能把我的程式執行出來。這樣認為也不錯,但是要想在這
Android手機是2010年開始火爆上市,因為它的炫,很快成了手機行業的老大,又因為是基於在java語言上開發的,當然啦,我這麼說是不對的,瞭解android的朋友都是知道的,我說的只是android的頂層應用層,而下面還有基於Linux的核心層、系統執行層即我們所說的C、C++庫和Android執行庫等構成。
從事java開發的朋友對查API文件來說是再熟悉不過了,android開發也同樣離不開檢視API文件。我說說我自己的經歷吧,當初我剛開始學java語言的時候,什麼也不懂,老師說什麼面向物件,我覺得與
說了這麼多的廢話,大家也不耐煩了。下面我就用我自己所理解的方法給大家展示一下吧。
首先我建立第一個MainActivity類。
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "onCreate()");
Button button = (Button) this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
}
});
Button threebutton = (Button) this.findViewById(R.id.threebutton);
threebutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ThreeActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy() {
Log.i(TAG, "onDestroy()");
super.onDestroy();
}
@Override
protected void onPause() {
Log.i(TAG, "onPause()");
super.onPause();
}
@Override
protected void onRestart() {
Log.i(TAG, "onRestart()");
super.onRestart();
}
@Override
protected void onResume() {
Log.i(TAG, "onResume()");
super.onResume();
}
@Override
protected void onStart() {
Log.i(TAG, "onStart()");
super.onStart();
}
@Override
protected void onStop() {
Log.i(TAG, "onStop()");
super.onStop();
}
}
其次,建立OtherActivity類,其程式碼如下:
public class OtherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
}
}
最後,再建立ThreeActivity 類
public class ThreeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.three);
}
}
執行結果給大家看一下:
當然,我並不是讓大家看執行後的介面,而是繞過大家看下後臺的資料哦。
先來一步一步操作下,執行下android application,開啟Logcat視窗(在Window下的Show View下Other...)如下圖2個步驟:
1.
2.
點OK吧。
在狀態列看到下圖標誌的了吧。點選綠色的標誌吧。
出現下圖的
我在Filter Name一欄輸入“MainActivity”的字串,在by Log Tag也輸入"MainActivity"字串,點選OK。
我們看到了第一個執行是onCreate()方法,第二個是onStart()方法,第三個是onResume()方法。這是第一次執行MainActivity類。
當我點選按鈕後,看下介面顯示吧:
再來看下後臺列印的資料啊:
前三個是剛才執行後的資料,第四條,是在我點選,從MainActivity調轉到OtherActivity了,會執行OnPause()方法。接下來我返回到MainActivity介面中,看看又有什麼變化:
是不是有第五條資料啦,這時事呼叫了OnResume()方法了。
我再來點選 ,看下前臺介面有什麼變化:
再來看下後臺資料吧:
這時又多出了2條資料了,分別是onPause()和onStop()方法。當從MainActivity跳轉到ThreeActivity類時,分別執行了onPause()和onStop()方法。再來返回到MainActivity類。看看後臺資料有沒有變化:
哇,看看打印出來的時間,就知道了,執行了三個方法,分別是onRestart()、onStart()、onResume()。
最後退出該程式吧,看看後臺的資料吧:
列印了onDestroy()方法了,這時是銷燬了。
好了,整個過程,我們也都看到了,我只是沒有清除列印臺,大家不要誤解,我擔心某些人錯認為都是一次性執行的結果。
總結一下吧:
第一次執行該程式時:onCreate()-->onStart()-->onResume(),跳轉到OtherActivity類時執行了onPause(),再從OtherActivity類返回到MainActivity類時執行了onResume();再跳轉到ThreeActivity類時執行了onPause()、onStop(),再從ThreeActivity返回到MainActivity類時執行了onRestart()-->onStart()-->onResume();最後退出該程式時,執行了onDestroy()。
進一步的總結:
onCreate()是程式啟動時就執行,一旦執行就不會在執行了,除非是銷燬了才會執行;一旦離開Activity(無論是何Activity)時就會執行onPause();當又回到原始的那個類時,執行的是onResume()。其他的一目瞭然了。
好了,到這裡了,應該理解了吧!
歡迎多來指點交流!