1. 程式人生 > >Android中的Activity生命週期

Android中的Activity生命週期

       說到生命週期,對於程式設計師來說並不陌生。如果學過Servlet的朋友,就更不會陌生了餓,其實差不多,android的生命週期與Servlet的生命週期有相似之處 。

            Android的生命週期通常是有這樣幾個方法構成:onCreate()onStart()onPause()onResume()onStop()onDestroy()onRestart()等七個。也許大家還不清楚我們為什麼要知道android的生命週期,也許大家這麼認為,我管它是什麼,我知道每次寫Activity時總是在onCreate()中,最終也能把我的程式執行出來。這樣認為也不錯,但是要想在這

android行業裡深入發展的,我相信,只要是程式設計師,他肯定是先把生命週期弄清楚才吃得下飯,睡得安穩。

       Android手機是2010年開始火爆上市,因為它的炫,很快成了手機行業的老大,又因為是基於在java語言上開發的,當然啦,我這麼說是不對的,瞭解android的朋友都是知道的,我說的只是android的頂層應用層,而下面還有基於Linux的核心層、系統執行層即我們所說的CC++庫和Android執行庫等構成。

      從事java開發的朋友對查API文件來說是再熟悉不過了,android開發也同樣離不開檢視API文件。我說說我自己的經歷吧,當初我剛開始學java語言的時候,什麼也不懂,老師說什麼面向物件,我覺得與

C語言沒有多大的區別呀,總是以為也是面向過程的,學到後面才知道,我們為什麼說java面向物件的。那是一次面試題目,寫出排序的方法,我那時基礎也不好,就用面向過程來完成,回來和朋友交流的時候,朋友說了讓我很驚呀,啊?這麼簡單你還弄得那麼複雜我就納悶啦,為什麼啊?結果他告訴我,你去查查API文件的Collections類,下面應該有個sort()方法吧。我回去一查,呀,這麼簡單啊,讓我自己弄的那麼複雜,真不該啊。好啦,從那以後,讓我弄清楚了面向物件和如何查API文件了。為什麼說是面向物件呢?是因為你只要呼叫Collections.sort()方法就解決如何排序問題,而面向過程是需要自己寫出每一步實現的過程;
java裡涵蓋的類實在是太多太多了,我相信就連發現java的人都不會全部記得的,這時就需要查API文件了,如何查呢?只要模糊的知道某個類,就在該類下搜尋,看看方法名、引數以及返回的物件,先地位再細看。就這麼的簡單。我希望大家不要去死記那些類,合理查API,一樣是關羽,一樣能過五關斬六將。

      說了這麼多的廢話,大家也不耐煩了。下面我就用我自己所理解的方法給大家展示一下吧。

      首先我建立第一個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 ViewOther...)如下圖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()其他的一目瞭然了。

好了,到這裡了,應該理解了吧!

歡迎多來指點交流!