(android文檔原創翻譯)管理Activity的生命週期<一>

來源:互聯網
上載者:User

標籤:android開發   activity生命週期   android官方文檔   activity   

(英文原文連結地址)
1.啟動你的Activity

   不同其它的應用程式通過main()方法來啟動,android系統是按照一定的順序通過調用其生命週期(lifecycle)的回調方法來啟動或者結束一個activity。本節簡要介紹了Activty的最為重要的生命週期,並且示意了怎樣處理一個Activity的生命週期.


理解什麼叫做生命週期的callbacks

    在Activity的生命週期中,android系統會按順序調用一系列類似於金字塔形排列的生命週期方法,即activity生命週期的每個階段都屬於金字塔的某一層.當系統建立一個Activity的時候,生命週期中的每一個方法的調用都會讓Activity讓生命週期金字塔的狀態發生跳轉(改變),而處於金字塔頂端的狀態即為activity當前生命週期的可見和可互動的階段。
    當使用者需要離開Activity的時候,系統會調用其它的一些方法讓Activity的生命週期跳轉到其它方法中.在一些cases中,Activity僅會部分的沿著金字塔進行跳轉和等待(例如當使用者切換到其它的APP時候).
    圖1.為活動周期的簡化圖示,表示activity的生命週期*金字塔,顯示了activity的生命週期之間的變化,以及生命週期的各個狀態之間的轉換
    
根據你Activity的複雜性,你不需要implement生命週期中的所有方法,但是你要明確的知道每一個生命週期的意義,確保應用是以使用者期望的方式運行,為了實現確保你的應用能夠滿足使用者的期望,你需要注意但不限於以下幾點:
  • 當使用者接到一個電話或者切換到其它的應用,應用不會被crash掉.當使用者沒有使用一些資源的時候,記得釋放掉它們
  • 當離開你的應用後再返回,你的應用不應該丟失掉前面的狀態資訊
  • 當應用發生橫豎屏切換的時候,確保應用不被crash掉並且不要丟失前面的狀態資訊
在隨後的學習的課程中,有幾種狀態用於表示圖1中不同狀態之間的轉換,但是只有三種狀態時處於靜態,也就是說activity能夠長時間的存活在這三個狀態中:
Resumed   在這個生命週期中,Activity是處於前台,並且使用者能夠與之互動(有時我們也叫做"運行"狀態)
paused        在這個狀態中,Activity被其它的Activity部分覆蓋,其它處於前台狀態Activity是半透明或者不會全部遮蓋,被覆蓋的activity是不能接受使用者的輸入也不會執行任何代碼.
Stopped     在這個狀態中,Activity完全被隱藏而且使用者是不可見的,Activity是被認為是處於背景,當進入stop狀態時,這個Activity的所有狀態資訊如成員變數會被保留,但是不能夠執行任何的代碼
    至於其它的狀態(Creaded and Stated)應用的生命週期會快速的進行轉換,如系統調用onCreate()後,它會立即調用onStart(),然後快速的跳轉到onResume() 以上是關於Activity的生命週期的基本知識,接下來我們將學習到關於Activity的特殊的行為。
    
指定你APP的啟動Activity      當使用者在home螢幕中點擊你應用的表徵圖時,系統會調用你聲明作為程式入口的"launcher activity""的onCreate方法,你有幾種方法可以指定你APP的入口。
你可以在AndroidManifest.xml中指定APP的main activity,AndroidManifest.xml是在你項目的根目錄下面.
這個main activity必須被顯式的在mainfest 下面的<intent-filter>中聲明,在<intent-filter>中包括了MAIN action 和LAUNCHERcategory.例如:
   
   <activity android:name=".MainActivity" android:label="@string/app_name">        <intent-filter>            <action android:name="android.intent.action.MAIN" />            <category android:name="android.intent.category.LAUNCHER" />        </intent-filter>    </activity>    
  提示:當你使用android SDK建立一個android project的時,系統會在專案檔夾下面建立一個預設的啟動activity
   

如果你沒有顯式的聲明MAIN Action或者LAUNCHER catgory的時候,你的APP的icon將不會出現在Home螢幕(也就是我們手機的案頭上)列表中.


建立一個新的執行個體絕大多數的APP中都包含了多個activity,他允許使用者在多個Activity中進行切換,當使用者點擊APP的icon時一個mian activity將會被建立,系統會調用onCreate()方法來建立一個activity的執行個體。
你必須實現onCreate方法來開始一個activity的邏輯和這個activity的生命週期,例如,你在onCreate中定義使用者的介面並執行個體化一些變數.
例如,你在下面的例子的onCreate的方法中顯式的聲明了使用者的使用者介面(定義在XML檔案),定義了成員變數,並且配置了一些UI配置。

    TextView mTextView; // Member variable for text view in the layout        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);            // Set the user interface layout for this Activity        // The layout file is defined in the project res/layout/main_activity.xml file        setContentView(R.layout.main_activity);                // Initialize member TextView so we can manipulate it later        mTextView = (TextView) findViewById(R.id.text_message);                // Make sure we're running on Honeycomb or higher to use ActionBar APIs        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {            // For the main activity, make sure the app icon in the action bar            // does not behave as a button            ActionBar actionBar = getActionBar();            actionBar.setHomeButtonEnabled(false);        }    }

一旦onCreat()執行完畢,系統會快速的調用onStart()和onResume()方法,你的Activity不會停留在Created和Stated狀態,當系統調用onStart()方法時候activity是變成可見的狀態,但是onResume()方法會快速的被調用並處於Resumed狀態直到某些事情發生或者改變,例如當電話被呼叫時候,應用被切換到其它的Activty或者螢幕發生橫豎排改變時.
在接下來的其它的課程中,你講學習到當使用者從Stoped和Paused狀態回到resumed狀態的過程中onStart()和onResume()方法非常有用的。
*Note:onCreate()方法中包含了一個savedInstanceState參數,這個問題在後面的Recreating an Activity.課程中進行討論
Figure 2. Another illustration of the activity lifecycle structure with an emphasis on the three main callbacks that the system calls in sequence when creating a new instance of the activity: onCreate(), onStart(), and onResume(). Once this sequence of callbacks complete, the activity reaches the Resumed state where users can interact with the activity until they switch to a different activity.


銷毀(Destroy)Activity當Activity第一次建立的時候會調用OnCreate()方法,它最終會調用onDestroy()方法,當onDestroy()方法執行完後系統會將Activity的執行個體從記憶體中移除.
大多數的app應用不需要實現onDestroy這個方法,因為Activity的執行個體引用會隨著Activity的銷毀而回收,在onPause()和onStop()的狀態中而被清除.然而,如果你的Activity中有後台線程或者長時間被引用的資源,那麼你必須在onDestroy()中進行清除回收,否則會造成記憶體流失.

 @Override    public void onDestroy() {        super.onDestroy();  // Always call the superclass                // Stop method tracing that the activity started during onCreate()        android.os.Debug.stopMethodTracing();    }

  Note:在onPause()和onStop()執行完後系統會調用OnDestroy()方法,除非:你自己在onCreate()方法調用finish()方法.在一些cases中,例如當前的Activity用來臨時啟動其它的Activity的時候,你可能會在onCreate()中使用finish()方法來結束當前的Activity,這個時候系統會立即調用onDestroy()方法而不會進過其它的生命週期.


    NEXT:pausing and Resuming an activity


pS:以上連結請自備VPN帳號,作為一個android開發的沒有VPN帳號很多資訊只能是二手資訊,這裡我推薦使用(紅杏軟體)

(android文檔原創翻譯)管理Activity的生命週期<一>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.