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

Android系列教程:Activity的生命周期能演示

編輯:高級開發

一:Activity的生命周期方法

  android提供了很多Activity的生命周期方法,比如我們常用的onCreate、onPause、onResume等。這裡主要介紹粗粒度的周期方法,諸如onPostCreate、onPostResume等

  這些細粒度的周期方法可以參考android的API文檔,在你需要更細層次的控制的時候可以使用這些細粒度的方法。粗粒度的周期方法有以下幾個:

  onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy(),從名字上就可以看出來這些方法在什麼時候執行。

  二:測試Activity的生命周期方法的執行順序

  為了能更明白上這幾個周期放的執行順序,我們新建一個HelloWorld項目,在Activity中覆蓋這幾個方法,打印出日志就可以看出來執行順序了

  新建HelloWorld項目,詳細步驟可以參見:

  android教程之三:第一個android應用,HelloWorld

  修改main.XML內容為:

  XML代碼

  < ?XML version="1.0" encoding="utf-8"?>

  < LinearLayout XMLns:android="http://schemas.android.com/apk/res/android"

  android:orIEntation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  >

  < TextVIEw

  android:layout_width="fill_parent"

  android:layout_height="wrap_content"

  android:text="第一個Activity"

  />

  < Button

  android:id="@+id/second"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:text="打開第二個Activity"/>

  < /LinearLayout>

  < ?XML version="1.0" encoding="utf-8"?>

  < LinearLayout XMLns:android="http://schemas.android.com/apk/res/android"

  android:orIEntation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  >

  < TextVIEw

  android:layout_width="fill_parent"

  android:layout_height="wrap_content"

  android:text="第一個Activity"

  接上頁

  />

  < Button

  android:id="@+id/second"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:text="打開第二個Activity"/>

  < /LinearLayout>

  這裡主要是為增加一個文本顯示和一個按鈕用於顯示信息和操作。

  新建布局文件second.XML,內容如下:

  XML代碼

  < ?XML version="1.0" encoding="utf-8"?>

  < LinearLayout

  XMLns:android="http://schemas.android.com/apk/res/android"

  android:orIEntation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent">

  < TextVIEw

  android:layout_width="fill_parent"

  android:layout_height="wrap_content"

  android:text="第二個Activity"

  />

  < Button

  android:id="@+id/exit"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:text="退出"/>

  < /LinearLayout>

  < ?XML version="1.0" encoding="utf-8"?>

  < LinearLayout

  XMLns:android="http://schemas.android.com/apk/res/android"

  android:orIEntation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent">

  < TextVIEw

  android:layout_width="fill_parent"

  android:layout_height="wrap_content"

  android:text="第二個Activity"

  />

  < Button

  android:id="@+id/exit"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:text="退出"/>

  < /LinearLayout>

  這裡主要是為增加一個文本顯示和一個退出按鈕用於退出當前Activity。

  新建一個Activity,名字為SecondActivity,內容如下:

  Java代碼

  public class SecondActivity extends Activity {

  接上頁

  private final static String TAG="SecondActivity";

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  Log.v(TAG, "onCreate");

  setContentVIEw(R.layout.second);

  //退出按鈕

  Button btnExit=(Button)findVIEwById(R.id.exit);

  //為退出按鈕設置單擊事件

  btnExit.setOnClickListener(new OnClickListener() {

  @Override

  public void onClick(VIEw v) {

  finish();//關閉當前Activity,也就是退出

  }

  });

  }

  @Override

  protected void onStart() {

  super.onStart();

  Log.v(TAG, "onStart");

  }

  @Override

  protected void onResume() {

  super.onResume();

  Log.v(TAG, "onResume");

  }

  @Override

  protected void onPause() {

  super.onPause();

  Log.v(TAG, "onPause");

  }

  @Override

  protected void onStop() {

  super.onStop();

  Log.v(TAG, "onStop");

  }

  @Override

  protected void onDestroy() {

  super.onDestroy();

  Log.v(TAG, "onDestroy");

  }

  }

  public class SecondActivity extends Activity {

  private final static String TAG="SecondActivity";

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  Log.v(TAG, "onCreate");

  setContentVIEw(R.layout.second);

  //退出按鈕

  Button btnExit=(Button)findVIEwById(R.id.exit);

  //為退出按鈕設置單擊事件

  btnExit.setOnClickListener(new OnClickListener() {

  @Override

  public void onClick(VIEw v) {

  finish();//關閉當前Activity,也就是退出

  }

  });

  接上頁

  }

  @Override

  protected void onStart() {

  super.onStart();

  Log.v(TAG, "onStart");

  }

  @Override

  protected void onResume() {

  super.onResume();

  Log.v(TAG, "onResume");

  }

  @Override

  protected void onPause() {

  super.onPause();

  Log.v(TAG, "onPause");

  }

  @Override

  protected void onStop() {

  super.onStop();

  Log.v(TAG, "onStop");

  }

  @Override

  protected void onDestroy() {

  super.onDestroy();

  Log.v(TAG, "onDestroy");

  }

  }

  我在各個周期方法了都加了日志信息,便於跟蹤Activity的運行過程

  修改HelloWorld類,內容如下:

  Java代碼

  public class HelloWorld extends Activity {

  private final static String TAG="HelloWorld";

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  Log.v(TAG, "onCreate");

  setContentVIEw(R.layout.main);

  //打開第二個Activity的按鈕

  Button btnSecond=(Button)findVIEwById(R.id.second);

  //設置單擊事件

  btnSecond.setOnClickListener(new OnClickListener() {

  @Override

  public void onClick(VIEw v) {

  startActivity(new Intent(HelloWorld.this,SecondActivity.class));

  finish();//關閉當前Activity

  }

  });

  }

  @Override

  protected void onStart() {

  super.onStart();

  Log.v(TAG, "onStart");

  }

  @Override

  protected void onResume() {

  super.onResume();

  Log.v(TAG, "onResume");

  }

  @Override

  protected void onPause() {

  接上頁

  super.onPause();

  Log.v(TAG, "onPause");

  }

  @Override

  protected void onStop() {

  super.onStop();

  Log.v(TAG, "onStop");

  }

  @Override

  protected void onDestroy() {

  super.onDestroy();

  Log.v(TAG, "onDestroy");

  }

  }

  public class HelloWorld extends Activity {

  private final static String TAG="HelloWorld";

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  Log.v(TAG, "onCreate");

  setContentVIEw(R.layout.main);

  //打開第二個Activity的按鈕

  Button btnSecond=(Button)findVIEwById(R.id.second);

  //設置單擊事件

  btnSecond.setOnClickListener(new OnClickListener() {

  @Override

  public void onClick(VIEw v) {

  startActivity(new Intent(HelloWorld.this,SecondActivity.class));

  finish();//關閉當前Activity

  }

  });

  }

  @Override

  protected void onStart() {

  super.onStart();

  Log.v(TAG, "onStart");

  }

  @Override

  protected void onResume() {

  super.onResume();

  Log.v(TAG, "onResume");

  }

  @Override

  protected void onPause() {

  super.onPause();

  Log.v(TAG, "onPause");

  }

  @Override

  protected void onStop() {

  super.onStop();

  Log.v(TAG, "onStop");

  }

  @Override

  protected void onDestroy() {

  super.onDestroy();

  Log.v(TAG, "onDestroy");

  }

  }

  運行程序,分析結果,發現當程序啟動的時候,日志信息為下圖:

  接上頁

  由此可見當打開一個Activity的時候,其周期方法執行順序為:onCreate()->onStart()->onResume(),現在點擊“打開第二個Activity”按鈕,看日志的輸出如下圖:

  當應用從Helloworld這個Activity啟動SecondActivity的時候,android會先執行HelloWorld的onPause 方法,然後依次執行SecondActivity的onCreate()->onStart()->onResume()方法

  當SecondActivity呈現到屏幕上的時候再一次執行Helloworld的onStop()->onDestroy(),把HelloWorld從Activity棧中移除銷毀。這裡值得提的就是HelloWorld 中finish方法,因為執行了他所以

  HelloWorld才會從Activity棧中移除銷毀,這樣當你按“返回”鍵返回的時候就回不到HelloWorld 這個Activity的界面了,而是直接回到的android的應用程序列表 。

  三:分析結果

  根據上面例子可見一個Activity在啟動的時候會執行onCreate()->onStart()->onResume(),在結束(或離開)的時候會執行 onPause()->onStop()->onDestroy(),這就是一個Activity的生命周期。

  因此我們要在onCreate方法裡把Activity的需要的東西准備好,也就是初始化;在onResume裡對Activity裡的東西做一些調整;在onPause做一些清理和保存工作(保存持久狀態),因為這是最後的

  機會,因為onPause完成之前android不會結束托管Activity類的進程,而之後進程可能被結束。總結一下這幾個周期方法的作用:

  onCreate():創建Activity調用,用於Activity的初始化,還有個Bundle類型的參數,可以訪問以前存儲的狀態。

  onStart():Activity在屏幕上對用戶可見時調用

  onResume():Activity開始和用戶交互的時候調用,這時該Activity是在Activity棧的頂部。

  onPause():Activity被暫停時調用,也就是你要對你能看到的這個Activity說byebye的時候調用,這裡可以做一些清理和保存工作

  onStop():Activity被停止或者Activity變成不可見時調用

  onDestroy():Activity被從內存中移除,一般發生在執行finish方法時或者android回收內存的時候

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