Activity 概念:
應用程序中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監聽並處理用戶的事件做出響應。
Activity的三個狀態:
運行狀態(顯示在主屏幕上,可見)、停止狀態(不可見)、暫停狀態(被其他的Activity遮蔽一部分)
Activity的生命週期 (7大方法):
Activity的操作:
1.配置屬性:Application有一個主的Activity來作爲入口,由它啓動其他的Activity
創建一個新的Activity,必須在配置文件中,申明一個Activity。
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
android.intent.action.MAIN 表示此Activity爲App的入口;
android.intent.category.LAUNCHER則表示此入口爲系統的圖標或快捷方式啓動;
但App並不只能有一個入口,也有可能是由intent-filter打開方式啓動app。
創建一個簡單的Activity
1. 第1步:創建繼承於Activity的子類,作爲實現Activity的邏輯代碼。
2. 第2步:在AndroidManifest.xml文件中在Application節點內創建以下片斷,一般用IDE創建時,都已經自己生成對應的XML。
<activity android:name=".activity.Second"></activity>
3. 第3步:在主Activity中調用新的Activity。
startActivity(new Intent(this,Second.class));
一般建議調用Activity的方法由新的Activity(Second類)的靜態方法來提供,而調用時,只需傳遞入對應的參數,由新的Activity來組成Intent進行調用,這樣可以把邏輯都放於對應的Activity,代碼會顯得更加清晰。如以下代碼(摘自K-9 Mail開源代碼:
public static void actionSettings(Context context, Account account) {
//在這裏組裝一個Intent
Intent i = new Intent(context, AccountSettings.class);
//加入對應需要的數據,放於Intent裏面
i.putExtra(EXTRA_ACCOUNT, account.getUuid());
//啓動對應的Activity
context.startActivity(i);
}
Activity的顯示順序隊列遵循棧的模型
後入先出,最前打開的Activity在最上面
在同一個app裏面每一個Activity被啓動後,原來的Activity將會被放入到 Activity返回順序棧 裏面,如圖(摘自Android網站):
1、 啓動主Activity,可能是用系統的圖標啓動,也可能是用Intent-filter啓動,此時Activity 1就被放入到 Activity返回順序棧中。
2、 當點擊“Start Activity 2”按鈕時,系統將拉起新的Activity 2,此時Activity 2將被放入到棧中;
3、 當點擊“Start Activity 3”按鈕時,系統將拉起新的Activity 3,此時Activity 3將被放入到棧中;
4、 當點擊返回按鈕時,系統將會把Activity 3退出,返回到Activity 2;
當Finish()的Activity將不會放入到隊列中
如圖:
1、 主Activity被拉起;
2、 主Activity拉起Activity 1,此時棧中顯示如2;
3、 當Activity 1 拉起 Activity 2後,調用了finish()方法,則Activity 1 將不會被放入到棧中,而是直接結束了生命週期,而Activity 2 則被放入棧中,當再次按返回鍵時,則返回到主Activity;
針對目前有許多的app需要按多次返回鍵後才能退出,有時還是在同一Activity界面出現多次,可以使用此方法進行解決,例如以下代碼:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom);
startActivity(new Intent(this,Second.class));
finish(); //啓動後直接調用finish()方法結束生命週期
}