Android Activity
活動(activity)表示一個單一屏幕上的用戶界麵。例如,電子郵件應用程序可能是一個活動,顯示新的電子郵件列表是另一個活動,撰寫電子郵件,閱讀電子郵件可能又是其它的活動。如果應用程序有一個以上的活動,那麼應該將其中的一個活動標記為活動啟動應用程序。
如果曾使用C,C++或Java編程語言,那麼可以知道一般程序是從 main() 函數開始。相似地,Android係統是一個Activity 的 onCreate() 方法調用開始啟動程序。一個回調方法 - 啟動一個活動,以及其它回調方法,如銷毀一個活動,活動的生命周期如下圖所示序列:
Activity類定義了以下的回調方法,即事件。並不需要實現所有的回調方法。然而重要的是了解每一個變化以及實現,以確保應用程序如用戶所期望的行為或方式。
回調方法 | 描述 |
---|---|
onCreate() | 這是第一次回調,活動在第一次創建時調用。 |
onStart() | 這個回調被稱為活動時變成對用戶可見。 |
onResume() | 這就是所謂的啟動,當用戶與應用程序交互。 |
onPause() | 暫停活動不接收用戶輸入並不執行任何代碼並調用時,當前的活動被暫停,恢複以前的活動。 |
onStop() | 這個回調被稱為活動時不再可見 |
onDestroy() | 活動前由係統被銷毀,調用此回調 |
onRestart() | 活動重新啟動時,停止後調用此回調 |
例子
這個例子通過簡單的步驟,顯示Android應用程序活動的生命周期。按照下麵的步驟來修改Android應用程序,在創建的 Hello World 範例章節:
步驟 | 描述 |
---|---|
1 | 我們將使用Eclipse IDE中創建一個Android應用程序,並將其命名在 HelloWorld 的包下,如:com.example.helloworld的Hello World範例章節解釋。 |
2 | 修改Main活動文件MainActivity.java,其餘文件保持不變。 |
3 | 運行該應用程序啟動Android模擬器並驗證應用程序中所做的更改結果。 |
以下是修改主要活動文件src/com.example.helloworld/MainActivity.java後的內容,該文件包含了每個基本生命周期方法。 Log.d() 方法是用來生成日誌消息:
package com.example.helloworld; import android.os.Bundle; import android.app.Activity; import android.util.Log; public class MainActivity extends Activity { String msg = "Android : "; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(msg, "The onCreate() event"); } /** Called when the activity is about to become visible. */ @Override protected void onStart() { super.onStart(); Log.d(msg, "The onStart() event"); } /** Called when the activity has become visible. */ @Override protected void onResume() { super.onResume(); Log.d(msg, "The onResume() event"); } /** Called when another activity is taking focus. */ @Override protected void onPause() { super.onPause(); Log.d(msg, "The onPause() event"); } /** Called when the activity is no longer visible. */ @Override protected void onStop() { super.onStop(); Log.d(msg, "The onStop() event"); } /** Called just before the activity is destroyed. */ @Override public void onDestroy() { super.onDestroy(); Log.d(msg, "The onDestroy() event"); } }
活動類加載UI組件,使用在項目的 res/layout 文件夾的XML文件。下麵的語句從 res/layout/activity_main.xml 文件加載UI組件:
setContentView(R.layout.activity_main);
應用程序可以有一個或多個活動受任何限製。每個活動定義為應用程序必須在AndroidManifest.xml文件中聲明,必須聲明應用程序的主要活動列表<intent-filter>,包括如下MAIN 操作和 LAUNCHER 類:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.helloworld" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
如果 MAIN 動作或LAUNCHER類不聲明一個活動,那麼應用程序圖標將不會出現在應用程序列表的主屏幕上。
現在嘗試運行修改後的 Hello World!應用程序。假設已經創建了AVD,同時做環境設置。從Eclipse運行應用程序,打開一個項目的活動文件,並單擊“Run” 圖標。Eclipse 在 AVD上安裝應用程序,並啟動它,如果設置和應用都冇有問題,它會顯示仿真器窗口中,也應該看到以下日誌消息在Eclipse IDE LogCat 窗口:
07-19 15:00:43.405: D/Android :(866): The onCreate() event 07-19 15:00:43.405: D/Android :(866): The onStart() event 07-19 15:00:43.415: D/Android :(866): The onResume() event
點擊紅色按鈕 - 在Android模擬器上的紅色按鈕,它會在Eclipse IDE窗口LogCat中生成以下事件消息:
07-19 15:01:10.995: D/Android :(866): The onPause() event 07-19 15:01:12.705: D/Android :(866): The onStop() event
讓我們再次嘗試單擊菜單按鈕 - Android菜單按鈕在Android模擬器中,它會在Eclipse IDE 的 LogCat窗口中生成以下事件消息:
07-19 15:01:13.995: D/Android :(866): The onStart() event 07-19 15:01:14.705: D/Android :(866): The onResume() event
接下來,就讓我們再次嘗試點擊後退按鈕 - Android後退按鈕在Android模擬器,它會生成以下事件消息在Eclipse IDE LogCat窗口中,以上完成Android應用程序Acitivity 的生命周期。
07-19 15:33:15.687: D/Android :(992): The onPause() event 07-19 15:33:15.525: D/Android :(992): The onStop() event 07-19 15:33:15.525: D/Android :(992): The onDestroy() event