淺談Android四大組件之Activity

Activity是Android中最重要,最多見,也是最基本的組件,下面來詳細介紹下Activity。android

一:介紹程序員

一個Acitvity做爲一個顯示在屏幕上的用戶交互界面,好比在電子郵件應用中好比:一個用來顯示收件列表的Activity,一個用來寫郵件的Activity,一個閱讀郵件內容的Activity,等等。Activity用來提供用戶體驗,許多不一樣體驗的Activity彙集在一塊兒便可以造成一個Android應用程序的用戶體驗,每一Activity都是相互獨立的。應用除了能夠訪問本身的Activity,也能夠訪問其餘APP的Acitivity(須要被APP容許)。數據庫

其次,Activity類間接或者直接的繼承了Content,ContextWrapper,ContextThemeWrapper等基類,因此Activity能夠直接調用他們的方法。爲了讓Service可以響應用戶請求開發者須要重寫HttpService的doRequest(...),doResponse(。。)方法,或者重寫Service(...),Activity與此相似,建立一個Activity也須要實現一個或多個方法,其中最多見的就是實現onCreate(Bundle status),該方法會在Activity建立時被回調,該方法調用Activity的setContentView(View view)方法來顯示要展現的View,爲了管理應用程序中的各組件,調用Activity的findViewById(int id)方法來獲取程序界面中的組件。bash

二:Activity的生命週期app

一個Activity的啓動順序:ide

  onCreate()——>onStart()——>onResume()佈局

  當另外一個Activity啓動時:ui

  第一個Activity onPause()——>第二個Activity onCreate()——>onStart()——>onResume()spa

  ——>第一個Activity onStop()設計

  當返回到第一個Activity時:

  第二個Activity onPause() ——> 第一個Activity onRestart()——>onStart()——>onResume()

  ——>第二個Activity onStop()——>onDestroy()

  一個Activity的銷燬順序:

  (狀況一)onPause()——><Process Killed>

  (狀況二)onPause()——>onStop()——><Process Killed>

  (狀況三)onPause()——>onStop()——>onDestroy()

  每個活動( Activity )都處於某一個狀態,對於開發者來講,是沒法控制其應用程序處於某一個狀態的,這些均由系統來完成。

  可是當一個活動的狀態發生改變的時候,開發者能夠經過調用 onXX() 的方法獲取到相關的通知信息。

  在實現 Activity 類的時候,經過覆蓋( override )這些方法便可在你須要處理的時候來調用。

  1、 onCreate :當活動第一次啓動的時候,觸發該方法,能夠在此時完成活動的初始化工做。

  onCreate 方法有一個參數,該參數能夠爲空( null ),也能夠是以前調用onSaveInstanceState ()方法保存的狀態信息。

  2、 onStart :該方法的觸發表示所屬活動將被展示給用戶。

  3、 onResume :當一個活動和用戶發生交互的時候,觸發該方法。

  4、 onPause :當一個正在前臺運行的活動由於其餘的活動須要前臺運行而轉入後臺運行的時候,觸發該方法。這時候須要將活動的狀態持久化,好比正在編輯的數據庫記錄等。

  5、 onStop :當一個活動再也不須要展現給用戶的時候,觸發該方法。若是內存緊張,系統會直接結束這個活動,而不會觸發 onStop 方法。 因此保存狀態信息是應該在onPause時作,而不是onStop時作。活動若是沒有在前臺運行,都將被中止或者Linux管理進程爲了給新的活動預留足夠的存儲空間而隨時結束這些活動。所以對於開發者來講,在設計應用程序的時候,必須時刻牢記這一原則。在一些狀況下,onPause方法或許是活動觸發的最後的方法,所以開發者須要在這個時候保存須要保存的信息。

  6、onRestart :當處於中止狀態的活動須要再次展示給用戶的時候,觸發該方法。

  7、 onDestroy :當活動銷燬的時候,觸發該方法。和onStop 方法同樣,若是內存緊張,系統會直接結束這個活動而不會觸發該方法。

  · onSaveInstanceState :系統調用該方法,容許活動保存以前的狀態,好比說在一串字符串中的光標所處的位置等。

  一般狀況下,開發者不須要重寫覆蓋該方法,在默認的實現中,已經提供了自動保存活動所涉及到的用戶界面組件的全部狀態信息。

三:與Activity 生命週期相關的方法

在 android.app.Activity類中,Android 定義了一系列與生命週期相關的方法,在咱們本身的 Activity 中,只是根據須要複寫須要的方法,Java 的多態性會保證咱們本身的方法被虛擬機調用,這一點與 J2ME 中的 MIDlet 相似。

 

 public class OurActivity extends Activity { 
    protected void onCreate(Bundle savedInstanceState); 
    protected void onStart(); 
    protected void onResume(); 
    protected void onPause(); 
    protected void onStop(); 
    protected void onDestroy(); 
 }

 說明以下:

1:protected void onCreate(Bundle savedInstanceState)一個 Activity 的實例被啓動時調用的第一個方法。通常狀況下,咱們都覆蓋該方法做爲應用程序的一個入口點,在這裏作一些初始化數據、設置用戶界面等工做。大多數狀況下,咱們都要在這裏從 xml 中加載設計好的用戶界面。例如:

setContentView(R.layout.main);

 

固然,也可從 savedInstanceState中讀咱們保存到存儲設備中的數據,可是須要判斷 savedInstanceState是否爲 null,由於 Activity 第一次啓動時並無數據被存貯在設備中:

 
 if(savedInstanceState!=null){ 
 savedInstanceState.get("Key"); 
 }

 

 

       2:protected void onStart()該方法在 onCreate() 方法以後被調用,或者在 Activity 從 Stop 狀態轉換爲 Active 狀態時被調用。

 

 

      3:protected void onResume()在 Activity 從 Pause 狀態轉換到 Active 狀態時被調用。

 

     4:protected void onPause()在 Activity 從 Active 狀態轉換到 Pause 狀態時被調用。

     5:protected void onStop()在 Activity 從 Active 狀態轉換到 Stop 狀態時被調用。通常咱們在這裏保存 Activity 的狀態信息。

    6:protected void onDestroy()在 Active 被結束時調用,它是被結束時調用的最後一個方法,在這裏通常作些釋放資源,清理內存等工做。

Activity狀態轉化圖

                                                 

  如上所示,Android 程序員能夠決定一個 Activity 的「生」,但不能決定它的「死」,也就時說程序員能夠啓動一個 Activity,可是卻不能手動的「結束」一個

Activity。當你調用 Activity.finish()方法時,結果和用戶按下 BACK 鍵同樣:告訴 Activity Manager 該 Activity 實例完成了相應的工做,能夠被「回

收」[ 根據下文的意思,應該是調用finish方法時只能使Activity進入Stoped狀態 ]。隨後 Activity Manager 激活處於棧第二層的 Activity 並從新入棧,同

時原 Activity 被壓入到棧的第二層,從 Active 狀態轉到 Paused 狀態。例如:從 Activity1 中啓動了 Activity2,則當前處於棧頂端的是 Activity2,第

二層是 Activity1,當咱們調用 Activity2.finish()方法時,Activity Manager 從新激活 Activity1 併入棧,Activity2 從 Active 狀態轉換 Stoped 狀

態,Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被執行,Activity2 返回的數據經過 data參數返回給 Activity1。

四:建立一個Activity的流程

首先,建立Activit

y

一個Activity建立完成後,爲了它能夠訪問系統必需要聲明註冊它到應用的AndroidManifest.xml文件中:

 

重寫onCreate方法

 onCreate(),當活動第一次啓動時,觸發該方法,能夠在此時完成活動的初始化工做,此方法必需要重寫。系統調用此方法建立activity,實現該方法是你初始化你所建立Activity的重要步驟。其中最重要的就是調用 setContentView() 去定義你的要展示的用戶界面的佈局。

相關文章
相關標籤/搜索