Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android啟動Activity

Android啟動Activity

編輯:關於Android編程

Android和java啟動的區別

不同於使用 main() 方法啟動應用的其他編程范例,Android 系統會通過調用對應於其生命周期中特定階段的特定回調方法在 Activity 實例中啟動代碼。有一系列可啟動 Activity 的回調方法,以及一系列可分解 Activity 的回調方法。

了解生命周期回調
在 Activity 的生命周期中,系統會按類似於階梯金字塔的順序調用一組核心的生命周期方法。 也就是說,Activity 生命周期的每個階段就是金字塔上的一階。 當系統創建新 Activity 實例時,每個回調方法會將 Activity 狀態向頂端移動一階。 金字塔的頂端是 Activity 在前台運行並且用戶可以與其交互的時間點。

當用戶開始離開 Activity 時,系統會調用其他方法在金字塔中將 Activity 狀態下移,從而銷毀 Activity。 在有些情況下,Activity 將只在金字塔中部分下移並等待(比如,當用戶切換到其他應用時),Activity 可從該點開始移回頂端(如果用戶返回到該 Activity),並在用戶停止的位置繼續。

這裡寫圖片描述
圖 簡化的 Activity 生命周期圖示,以階梯金字塔表示。此圖示顯示,對於用於將 Activity 朝頂端的“繼續”狀態移動一階的每個回調,有一種將 Activity 下移一階的回調方法。 Activity 還可以從“暫停”和“停止”狀態回到繼續狀態。

根據 Activity 的復雜程度,您可能不需要實現所有生命周期方法。 但是,了解每個方法並實現確保您的應用按照用戶期望的方式運行的方法非常重要。

正確實現您的 Activity 生命周期方法可確保您的應用按照以下幾種方式良好運行,包括:

如果用戶在使用您的應用時接聽來電或切換到另一個應用,它不會崩潰。
在用戶未主動使用它時不會消耗寶貴的系統資源。
如果用戶離開您的應用並稍後返回,不會丟失用戶的進度。
當屏幕在橫向和縱向之間旋轉時,不會崩潰或丟失用戶的進度。

Activity 只能在三種狀態之一下存在很長時間。

繼續

在這種狀態下,Activity 處於前台,且用戶可以與其交互。(有時也稱為“運行”狀態。)

暫停

在這種狀態下,Activity 被在前台中處於半透明狀態或者未覆蓋整個屏幕的另一個 Activity—部分阻擋。 暫停的 Activity 不會接收用戶輸入並且無法執行任何代碼。

停止

在這種狀態下,Activity 被完全隱藏並且對用戶不可見;它被視為處於後台。 停止時,Activity 實例及其諸如成員變量等所有狀態信息將保留,但它無法執行任何代碼。
其他狀態(“創建”和“開始”)是瞬態,系統會通過調用下一個生命周期回調方法從這些狀態快速移到下一個狀態。 也就是說,在系統調用 onCreate() 之後,它會快速調用 onStart(),緊接著快速調用 onResume()。

指定您的應用的啟動器 Activity

當用戶從主屏幕選擇您的應用圖標時,系統會為您已聲明為“啟動器”(或“主要”)Activity 的應用中的 Activity 調用 onCreate() 方法。這是作為 您的應用的用戶界面主入口的 Activity。

您可以在 Android 清單文件 AndroidManifest.xml 中定義哪個 Activity 用作主 Activity,該文件位於您項目目錄的根目錄中。

您的應用的主 Activity 必須使用 (包括 MAIN 操作和 LAUNCHER 類別)在清單文件中聲明。例如:


    
        
        
    

注:當您使用 Android SDK工具創建新 Android 項目時,默認的項目文件包括使用過濾器在宣示說明中聲明的 Activity 類。

如果未對您的 Activity 之一聲明 MAIN 操作或 LAUNCHER 類別,那麼您的應用圖標將不會出現在應用的主屏幕列表中。

創建一個新實例

大多數應用包含若干個不同的 Activity,用戶可通過這些 Activity 執行不同的操作。無論 Activity 是用戶單擊您的應用圖標時創建的主 Activity 還是您的應用在響應用戶操作時開始的其他 Activity,系統都會通過調用其 onCreate() 方法創建 Activity 的每個新實例。

您必須實現 onCreate() 方法執行只應在 Activity 整個生命周期出現一次的基本應用啟動邏輯。 例如,您的 onCreate() 的實現應定義用戶界面並且可能實例化某些類范圍變量。

例如,onCreate() 方法的以下示例顯示執行 Activity 某些基本設置的一些代碼,比如聲明用戶界面(在 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);
    }
}

注意:使用 SDK_INT 可防止舊版系統以這種方式僅在 Android 2.0 (API 級別5)和更高級別執行新 API 工作。 較舊版本會遇到運行時異常。

一旦 onCreate() 完成執行操作,系統會相繼調用 onStart() 和 onResume() 方法。 您的 Activity 從不會駐留在“已創建”或“已開始”狀態。在技術上,Activity 會在 onStart() 被調用時變得可見,但緊接著是 onResume(),且 Activity 保持“繼續”狀態,直到有事情發生使其發生變化,比如當接聽來電時,用戶導航至另一個 Activity,或設備屏幕關閉。

注:onCreate() 方法包括一個稱為 savedInstanceState 的參數,將在有關重新創建 Activity的後續課程中討論該參數。

這裡寫圖片描述vcbky/sgQWN0aXZpdHmhozwvcD4NCjxoMiBpZD0="銷毀-activity">銷毀 Activity

當 Activity 的第一個生命周期回調是 onCreate() 時,它最近的回調是 onDestroy()。系統會對您的 Activity 調用此方法,作為您的 Activity 實例完全從系統內存移除的最終信號。

大多數應用不需要實現此方法,因為局部類引用與 Activity 一同銷毀,並且您的 Activity 應在 onPause() 和 onStop() 期間執行大多數清理操作。但是,如果您的 Activity 包含您在 onCreate() 期間創建的後台線程或其他如若未正確關閉可能導致內存洩露的長期運行資源,您應在 onDestroy() 期間終止它們。

@Override
public void onDestroy() {
    super.onDestroy();  // Always call the superclass

    // Stop method tracing that the activity started during onCreate()
    android.os.Debug.stopMethodTracing();
}

注:在所有情況下,系統在調用 onPause() 和 onStop() 之後都會調用 onDestroy(),只有一個例外:

當您從 onCreate() 方法內調用 finish() 時。在某些情況下,比如當您的 Activity 作為臨時決策工具運行以啟動另一個 Activity 時,您可從 onCreate() 內調用 finish() 來銷毀 Activity。在這種情況下,系統會立刻調用 onDestroy(),而不調用任何其他 生命周期方法。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved