Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> Android Activity的生命周期

Android Activity的生命周期

編輯:高級開發

 轉載地址:http://android.tgbus.com/android/tutorial/200812/172711.sHtml

  注意到在Activity的API中有大量的onXXXX形式的函數定義,除了我們前面用到的onCreate以外,還有 onStart,onStop以及onPause等等。從字面上看,它們是一些事件回調,那麼次序又是如何的呢?其實這種事情,自己做個實驗最明白不過了。在做這個實驗之前,我們先得找到在android中的Log是如何輸出的。

  顯然,我們要用的是android.util.log類,這個類相當的簡單易用,因為它提供的全是一些靜態方法: 引用:

  Log.v(String tag, String msg); //VERBOSE

  Log.d(String tag, String msg); //DEBUG

  Log.i(String tag, String msg); //INFO

  Log.w(String tag, String msg); //WARN

  Log.e(String tag, String msg); //ERROR前面的tag是由我們定義的一個標識,一般可以用“類名_方法名“來定義。

  輸出的LOG信息,如果用Eclipse+ADT開發,在LogCat中就可以看到,否則用adb logcat也行,不過我是從來都依賴於IDE環境的。

  好了,現在我們修改前面的HelloThree代碼: 引用:

  public void onStart()

  ...{

  super.onStart();

  Log.v(TAG,"onStart");

  }

  public void onStop()

  ...{

  super.onStop();

  Log.v(TAG,"onStop");

  }

  public void onResume()

  ...{

  super.onResume();

  Log.v(TAG,"onResume");

  }

  public void onRestart()

  ...{

  super.onRestart();

  Log.v(TAG,"onReStart");

  }

  public void onPause()

  ...{

  super.onPause();

  Log.v(TAG,"onPause");

  }

  public void onDestroy()

  ...{

  super.onDestroy();

  Log.v(TAG,"onDestroy");

  }

  public void onFreeze(Bundle outState)

  ...{

  super.onFreeze(outState);

  Log.v(TAG,"onFreeze");

  }

  在HelloThreeB中也同樣增加這樣的代碼,編譯,運行一下,從logcat中分析輸出的日志。

  接上頁

  在啟動第一個界面Activity One時,它的次序是:

  onCreate (ONE) - onStart (ONE) - onResume(ONE)

  雖然是第一次啟動,也要走一遍這個resume事件。然後,我們點goto跳到第二個Activity Two中(前一個沒有關閉),這時走的次序是:

  onFreeze(ONE) - onPause(ONE) - onCreate(TWO) - onStart(TWO) - onResume(TWO) - onStop(ONE)

  說明,第二個Activity Two在啟動前,One會經歷一個:凍結、暫停的過程,在啟動Two後,One才會被停止?

  然後,我們再點back回到第一個界面,這時走的次序是:

  onPause(TWO) - onActivityResult(ONE) - onStart(ONE) - onRestart(ONE) - onResume(ONE) - onStop(TWO) - onDestroy(TWO)

  說明,返回時,Two沒有經歷凍結就直接暫停了,在One接收參數,重啟後,Two就停止並被銷毀了。

  最後,我們點一下Exit退出應用,它的次序是:

  onPause(ONE) - onStop(ONE) - onDestroy(ONE)

  說明如果我們用了finish的話,不會有freeze,但是仍會經歷pause - stop才被銷毀。

  這裡有點疑問的是:為什麼回來時先是Start才是Restart?可是文檔中的圖上畫的卻是先restart再start的啊?不過,後面的表格中的描述好象是正確的,start後面總是跟著resume(如果是第一次)或者restart(如果原來被stop掉了,這種情況會在start 與resume 中插一個restart)。

  下面不跑例子了,看看文檔吧。

  1.android用Activity Stack來管理多個Activity,所以呢,同一時刻只會有最頂上的那個Activity是處於active或者running狀態。其它的Activity都被壓在下面了。

  2. 如果非活動的Activity仍是可見的(即如果上面壓著的是一個非全屏的Activity或透明的Activity),它是處於paused狀態的。在系統內存不足的情況下,paused狀態的Activity是有可被系統殺掉的。只是不明白,如果它被干掉了,界面上的顯示又會變成什麼模樣?看來下回有必要研究一下這種情況了。

  3.幾個事件的配對可以比較清楚地理解它們的關系。Create與Destroy配成一對,叫entrIE lifetime,在創建時分配資源,則在銷毀時釋放資源;往上一點還有Start與Stop一對,叫visible lifetime,表達的是可見與非可見這麼一個過程;最頂上的就是Resume和Pause這一對了,叫foreground lifetime,表達的了是否處於激活狀態的過程。

  4.因此,我們實現的Activity派生類,要重載兩個重要的方法:onCreate()進行初始化操作,onPause()保存當前操作的結果。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved