1. 程式人生 > >安卓API指南之Activity回顧

安卓API指南之Activity回顧

本系列的文章全部為學習摘要,不偏重各種細節展示,更多的是安卓體系重要節點的羅列,並適時加入少量自己的理解分析,以便能快速的回顧安卓體系結構和那些重要的技術點。

每個 Activity 都會獲得一個用於繪製其使用者介面的視窗。視窗通常會充滿螢幕,但也可小於螢幕並浮動在其他視窗之上。比如透明主題或者Dialog主題的Activity。

一個應用通常由多個彼此鬆散聯絡的 Activity 組成。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>

一般必須要是實現的方法:onCreate()–在此方法內呼叫 setContentView(),以定義 Activity 使用者介面的佈局;;onPause()–此方法是使用者離開 Activity 的第一個訊號。

  • 啟動Activity以及獲得結果
//啟動
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);

//啟動獲得結果
private void pickContact() {
    // Create an intent to "pick" a contact, as defined by the content provider URI
    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { // If the request went well (OK) and the request was PICK_CONTACT_REQUEST if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { /...... } } }
  • 實現生命週期回撥
    在api14+時,系統在Application裡添加了記錄Activity生命週期的方法ActivityLifecycleCallbacks,挺實用的,還可以根據onstart和onStop的切換來實時監控應用是否處於後臺。
    其它有關的來個表更合適。

這裡寫圖片描述

是否能在事後終止?列中標記為“否”的方法可從系統呼叫它們的一刻起防止承載 Activity 的程序被終止。也就是非極端情況下,在執行這些“否”方法時,該Activity不會被回收。

  • 儲存 Activity 狀態
    當Acty被非正常銷燬時,系統會先呼叫 onSaveInstanceState()來儲存一些資料。 當系統重建該 Activity,將會將包含資料的 Bundle 同時傳遞給 onCreate() 和 onRestoreInstanceState()。您可以使用上述任一方法從 Bundle 提取您儲存的狀態並恢復該 Activity 狀態。如果沒有狀態資訊需要恢復,則傳遞給您的 Bundle 是空值(如果是首次建立該 Activity,就會出現這種情況)。

注意:系統呼叫 onSaveInstanceState(),它會在呼叫 onStop() 之前,並且可能會在呼叫 onPause() 之前進行呼叫。

  • 處理配置變更
    有些裝置配置可能會在執行時發生變化(例如螢幕方向、鍵盤可用性及語言)。 發生此類變化時,Android 會重建執行中的 Activity(系統呼叫 onDestroy(),然後立即呼叫 onCreate())。處理此類重啟的最佳方法是利用onSaveInstanceState() 和 onRestoreInstanceState()(或 onCreate())儲存並恢復 Activity 的狀態。具體會在後面的文章中記錄。

作者: 劉鹹尚

  • 協調 Activity
    當 Activity A 啟動 Activity B 時一系列操作的發生順序:
    -> Activity A 的 onPause() 方法執行。
    -> Activity B 的 onCreate()、onStart() 和 onResume() 方法依次執行。(Activity B 現在具有使用者焦點。)
    -> 如果 Activity A 在螢幕上不再可見,則其 onStop() 方法執行。