Android應用程序由很多的Activity組成,本例將簡單說明Activity的生命周期過程:
new一個Android應用程序,其中先new兩個Activity用來演示(FirstActivity、SecondActivity):
FirstActivity:
布局first.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".FirstActivity" > <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_first" /> </RelativeLayout>
對應的FirstActivity.java:
package com.example.activity_04; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class FirstActivity extends Activity { private Button myBtn; class BtnClickListener implements OnClickListener{ @Override public void onClick(View arg0) { Intent intent=new Intent(); intent.setClass(FirstActivity.this, SecondActivity.class); FirstActivity.this.startActivity(intent); } } @Override protected void onCreate(Bundle savedInstanceState) { System.out.println("FirstActivity ---> onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.first); myBtn=(Button)findViewById(R.id.myButton); myBtn.setOnClickListener(new BtnClickListener()); } @Override protected void onStart() { System.out.println("FirstActivity ---> onStart"); super.onStart(); } @Override protected void onRestart() { System.out.println("FirstActivity ---> onRestart"); super.onRestart(); } @Override protected void onResume() { System.out.println("FirstActivity ---> onResume"); super.onResume(); } @Override protected void onPause() { System.out.println("FirstActivity ---> onPause"); super.onPause(); } @Override protected void onStop() { System.out.println("FirstActivity ---> onStop"); super.onStop(); } @Override protected void onDestroy() { System.out.println("FirstActivity ---> onDestroy"); super.onDestroy(); } }
重寫了Activity生命周期內的七個重要事件:onCreate、onStart、onResume、onPause、onStop、onRestart、onDestory,
在他們被執行時,分別輸出"Activity名 ---> 事件名",
同樣的方式new一個SecondActivity:
布局second.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SecondActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_second" /> </RelativeLayout>
對應的SecondActivity.java:
package com.example.activity_04; import android.app.Activity; import android.os.Bundle; public class SecondActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { System.out.println("SecondActivity ---> onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.second); } @Override protected void onStart() { System.out.println("SecondActivity ---> onStart"); super.onStart(); } @Override protected void onRestart() { System.out.println("SecondActivity ---> onRestart"); super.onRestart(); } @Override protected void onResume() { System.out.println("SecondActivity ---> onResume"); super.onResume(); } @Override protected void onPause() { System.out.println("SecondActivity ---> onPause"); super.onPause(); } @Override protected void onStop() { System.out.println("SecondActivity ---> onStop"); super.onStop(); } @Override protected void onDestroy() { System.out.println("SecondActivity ---> onDestroy"); super.onDestroy(); } }
需要觀察System.out輸出的信息,需要添加輸出log的過濾器:
1.打開DMMS頁:
2.添加一個過濾器:
3.輸入過濾器想要過濾出的內容:
過濾器過濾出的信息將會被顯示在LogCat窗口中
啟動Android模擬器,運行一下程序,分別執行以下步驟,觀察System.out的輸出:
1.啟動程序,首先打開的是FirstActivity(之前已在AndroidManifest.xml中配置):
觀察輸出如下:
2.點擊FirstActivity中的Button,切換到SecondActivity:
觀察輸出如下:
3.點擊Android模擬器的返回按鈕,跳轉回FirstActivity:
觀察輸出如下:
4.再次點擊FirstActivity中的Button,切換到SecondActivity:
觀察輸出如下:
總結如下:
一個Activity的創建順序執行:onCreate,onStart,onResume
從FirstActivity啟動SecondActivity時,順序調用:FirstActivity的onPause,然后SecondActivity的onCreate,onStart,onResume,最后是FirstActivity的onStop
七大事件:
onCreate:
當這個Activity第一次被創建的時候調用,在里面去設置布局文件、或者對按鈕綁定監聽器等一些靜態的操作;
onStart:
當這個Activity能被看到的時候調用;
onResume:
當這個Activity能獲得用戶焦點,用戶能操作這個Activity的時候調用;
onPause:
當要啟動另一個Activity時調用,例如當你的程序在運行時,有一個來電,系統調用電話,你的程序被遮擋住時調用,一般在里面寫一些保存當前Activity操作數據的代碼,以便恢復操作時還原數據;
onStop:
當這個Activity對用戶而言不可見的時候調用,如果上一個Activity調用出來的是一個小的對話塊,沒能完全遮擋住這個Activity,則不會調用上一個Activity的onStop;
onRestart:
當一個Activity對用戶不可見了以后,但是沒有被銷毀,再次要顯示的時候,就最先調用onRestart,而不需要再調用onCreate;
onDestory:
銷毀Activity,如果你在代碼里明確調用了finish方法,則會調用銷毀,或者當系統資源不夠用的時候,也會自動銷毀不可見的Activity,如果再啟用已經被銷毀的Activity時,需要再調用onCreate;