Android入門之Activity

來源:互聯網
上載者:User
Activity的介紹

原文地址:http://blog.csdn.net/Vange

===============================================

 

一個Application由多個Activity組成,不同的Activity來完成不同的功能

Android系統高層應用都由多個Activity組成,每一個Activity來完成對應的功能控制,類似於MVC模式中的C(控制器),它負責資料處理、控制介面的選擇及部分顯示。Activity的耦合性很低,只要app中設定了對應的Intent-filter則,其他的app也可以調用它的Activity,對於多種調用選擇時,系統會快顯功能表列表來由使用者選擇。

Activity用介面來表示自己,並不一定都顯示整個螢幕,有時也只是顯示在螢幕最上面的一小部分

每個Activity都會用setContentView()來設定對應的視圖來顯示自身的資料。大部分顯示時都是顯示在整個螢幕,但有時也只是顯示螢幕的一部分,如一些app在載入時的進度圈、在螢幕上方的字典查詢。

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則表示此入口為系統的表徵圖或捷徑啟動;

(相關的intent-filter介紹在以後文章再補充)

 

但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()方法結束生命週期

}

Activity的生命週期簡介生命週期

每次App被拉起後Activity就開始了自己的生命週期,它有可能顯示在最前方,也有可能顯示在其他Activity後面,有時它隱藏在其他Activity後面時還會被系統回收(在系統資源緊張的情況下),有時它被其他app調用,直到最終結束自己的生命週期。

每一個周期都會回調Activity實作類別中的對應的代碼,如 onCreate()、onStart()等。請看:

1、  onResume()是一個關鍵點,無論Activity是第一次被拉起,還是重新回到前端,都需要調用此回呼函數,所以對於資料及介面的初始化都可以在此方法裡面進行處理;

2、  onSaveInstanceState()是當新的Activity將要被拉起的情況下回調使用,根據函數名可以看出此回呼函數主要做一些資料的儲存,以防止當Activity再次被使用時無法初始化原來的情境;

3、  這個關鍵點是當系統資源緊張或者使用者使用某些進程管理軟體將App進行殺掉,許多App在開發時沒有考慮到此點,所以會出現應用在後台放置了一段時間,當使用者再使用此App時,就出現程式錯誤,或者一些變數未初始化;

4、  onDestroy()是當一個Activity已經完成了自己的生命週期,最終退出調用的回呼函數;

5、  當新的Activity被拉起時,都會在建立完成後再進行onStop()的調用;一般在onStop上進行一些資源的釋放,在onResume()對必要的資源進行確認;

 

 

對於調用的順序,可以寫一個簡單的Activity調用其他Activity的例子,同時在每個回呼函數上,寫上Log,則可以看到如的日誌列印:

 

 先寫這麼多,以後再繼續補充。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.