日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

【Android Developers Training】 15. 啟動一個

系統 2141 0

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術一般,由于喜愛安卓而產生了翻譯的念頭,純屬個人興趣愛好。

原文鏈接: http://developer.android.com/training/basics/activity-lifecycle/starting.html


不像其他的編程范例一樣應用的函數入口是“ main() ”方法,Android根據Activity處于何種聲明周期狀態去調用它所對應的生命周期回調函數,以此來創建一個Activity實例。有一系列的生命周期函數用來啟動一個Activity,與之對應的,也有一系列生命周期函數來銷毀一個Activity。

這堂課將概要地講解一些最重要的生命周期函數,然后向你展示如何處理第一個生命周期回調函數,這個函數用來創建一個Activity的實例。

?

?一). 理解生命周期回調函數

在一個Activity的聲明周期中,系統會調用一系列聲明周期函數,就像是一個金字塔階梯一樣向上爬行。每一個聲明階段都是金字塔上的一個臺階。當系統創建了一個新的Activity實例,每個聲明周期函數將Activity的狀態向上移動一個階段。在金字塔的頂端所對應的狀態是Activity已經在前臺同時獲得了用戶焦點。

當用戶要離開這個Activity,系統會調用其他生命周期函數(延金字塔下行)以次來銷毀Activity。在有些情況中,Activity會只下行一部分,然后等待(比如用戶切換到了其他應用),之后Activity可以從這個狀態再回到頂端(如果用戶重新回到Activity),并且恢復到用戶離開時的狀態

圖1. 一個關于Activity生命周期的簡單描繪,我們用階梯狀金字塔來解釋它,這個圖展示了每個回調函數都會轉移Activity的狀態

根據你的Activity的復雜度,你可能不需要實現所有的聲明周期函數。然而,你務必要理解每一個生命周期函數,并且在開發過程中,實現那些可以讓你的應用表現出用戶期望狀態的那些函數。實現你的Activity生命周期函數可以在多個方面讓你的應用表現出色,包括:

  • 不會因為用戶切換到另一個應用或者接了一個電話而崩潰
  • 不會在用戶不使用它時消耗太多系統資源
  • 不會在用戶離開應用再返回時,丟失使用進度
  • 不會在用戶切換屏幕方向時崩潰或丟失使用進度

隨著你進一步學習,會有多種如圖1中顯示的Activity狀態切換的情況。然而,只有這些狀態中的3個是靜態的。即,在一段時間內(非瞬時)Activity只能處于這三個狀態中的一個。

恢復態(Resumed)

在這個狀態,Activity在前臺,并且用戶可以和它交互(獲得用戶焦點),有些時候也稱之為“運行態”

暫停態(Paused)

在這個狀態,Activity有一部分被另一個Activity遮擋,也就是說,在前臺的這個Activity是半透明的,或者是沒有充滿整個屏幕的。當Activity處于這個狀態時,它不能接收用戶的輸入也不能執行任何代碼。

停止態(Stopped)

在這個狀態,Activity被完全地隱藏,無法被用戶看見,也可以理解為處于后臺。當處于停止態時,Activity的實例以及它的狀態信息,(如:成員變量)會被保留,這樣就能馬上使Activity轉移到恢復態。

?

?二). 指定你的啟動Activity

當用戶在主頁面點擊了你的應用圖標,系統會調用你在應用中聲明的啟動(launcher)Activity,(可理解為“main”)的 onCreate() 方法。這個Activity就是你的應用和用戶交互的主入口。

你可以在清單文件中定義哪個Activity作為入口Activity, AndroidManifest.xml 文件在你的項目工程的根目錄下。

你的應用的入口Activity必須在清單文件中使用 <intent-filter> 標簽 來聲明,在標簽中,具有 MAIN 行為(action),和 LAUNCHER 類別( category ),例如:

      
        <
      
      
        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
      
      
        >
      
    

Note:

當你使用Android SDK工具創建了一個新的Android項目工程,默認的項目文件會包含一個Activity,且它已在清單文件中擁有上述過濾器(filter)標簽聲明。

如果在你的Activity中, MAIN 行為或者 LAUNCHER 類別任何一個沒有聲明,那么你的應用圖標將不會在系統的主頁面應用圖標列表中出現。

?

三). 創建一個新的實例

大多數應用包含一些不同的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
      
      
        );

    }

}
      
    

Caution:

使用 SDK_INT 這種方法可以避免老版本系統執行較新的API,但這種方法只適用于Android 2.0(API LEvel 5)及以上。比這再之前的系統會遇到一個運行時錯誤。

一旦 onCreate() 方法完成了執行,系統會緊接著調用 onStart() onResume() 方法。你的Activity永遠不會停留在創建態(Created)或啟動態(Started)。從技術上說,當 onStart() 方法被調用后,activity對用戶變成可見的,但是 onResume() 方法緊跟著執行,然后activity保持在恢復態(Resumed)直到某些事件發生改變了它,比如當有一個電話打來,或這個用戶到了另一個activity,或者這個屏幕關閉了。

在后續的課程中,你將會看到其它用于啟動的方法( onStart() onResume() 方法 ),在你的activity生命周期中是非常重要的,尤其在當activity處于暫停態或停止態時被調用用來恢復activity。

Note:

onCreate() 方法包括一個叫做“ savedInstanceState ”的參數,在后續課程( Recreating an Activity )將會對其討論。

圖2. 圖中方框包括當創建一個新的activity實例時的三個回調方法: onCreate() onStart() onResume()

一旦這一系列回調函數執行完畢,activity到達了恢復態,用戶可與其交互,直到用戶切換到了另一個activity。

?

四). 銷毀Activity

Activity生命周期的第一個回調函數是 onCreate() ,最后一個回調函數式 onDestroy() 。當系統為activity調用這個方法后,就意味著activity實例從RAM中徹底被移除。

大多數應用不需要實現這個方法,因為本地類引用會隨著activity被銷毀,并且你的activity會在 onPause() 方法和 onStop() 方法中執行大多數的清除工作。然而,如果你的activity包含有在 onCreate() 中創建的后臺線程,或者其他會長時間運行的資源,不實現 onDestroy() 方法會導致內存泄露,所以你應該在 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() 方法。有一些這樣的例子:比如當你的 activity 是一個零時的決策者,用來決定要啟動哪一個 activity 。你可能會在 onCreate() 方法中調用 finish() 方法。在這種情況下,系統會馬上調用 onDestroy() 方法,而不會調用任何其他的生命周期函數。

【Android Developers Training】 15. 啟動一個Activity


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 泰顺县| 山阳县| 绥芬河市| 江西省| 博罗县| 广河县| 高平市| 科技| 大名县| 陇南市| 措勤县| 天全县| 雷波县| 新昌县| 临沭县| 三江| 会宁县| 黎川县| 长治市| 利川市| 灌南县| 江川县| 苏尼特右旗| 武安市| 济宁市| 剑河县| 琼中| 双鸭山市| 四平市| 龙岩市| 大足县| 江达县| 皮山县| 武山县| 大关县| 宝应县| 萨嘎县| 蓬莱市| 周至县| 德阳市| 隆德县|