歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android Training - 開始一個Activity

Android Training - 開始一個Activity

日期:2017/3/1 10:13:51   编辑:Linux編程

和其他程序不一樣的是,activity不是使用main()函數開始程序,Activity實例調用不同的回調函數對應它的生命周期的不同階段。這裡是安裝一個順序去啟動一個activity,並且按照一個順序去關閉activity。

這節課提供一個生命周期方法的概述,展示了怎麼操作第一個回調函數去創建一個新的activity實例。

理解生命周期回調函數

在activity的生命中,系統安裝順序調用生命周期函數的過程類似一個金字塔。生命周期的每個階段就想金字塔的每一層。系統啟動一個新的activity,調用一個個回調函數,就像一步步的到達金字塔頂端。這個頂端就是activity處於前台狀態的時候,用戶這時可以和它交互。

當用戶離開activity的時候,系統調用另外一些回調函數,讓activity狀態回到金字塔的底部。有時候activity只是走下金字塔的一部分,然後在那裡等待(就想用戶切換到了其他程序),activity可以從這裡重新回到頂端(用戶返回activity),處於前台運行狀態。

基於你的activity的復雜度,你可能不必要實現所有的回調函數。不管怎樣,理解它們,並且按照用戶期望的行為方式實現它們是很重要的。為了確保你的程序保持良好,合理的實現activity生命周期函數有很多方法:

如果用戶接電話或者切換到其他程序時,你的程序不能崩潰。

當用戶不使用它時不要浪費寶貴的系統資源。

當用戶暫時離開程序的時候,不要丟失用戶的進度。

旋轉屏幕的時候不要崩潰和丟失用戶進度。

從上面的圖我們可以看出,一個activity會在不同的狀態間轉換。不過只有3個狀態的靜態的。一段時間中,activity只能處於3個狀態中的一個:

Resumed

這個就是activity處於前台時的狀態。

Paused

處於這個狀態,activity是被其他activity是部分掩蓋著的 - 這個其他activity可能是半透明的,或者是沒有完全覆蓋整個屏幕的。這個狀態下,activity不能接受用戶的輸入,也不能執行任何代碼。

Stopped

這個狀態下,activity是不可見的,它在系統後台運行著。當stopped的時候,activity實例和他的信息狀態像成員變量一樣被保留,也不能執行任何代碼。

其他狀態(Created和Started)是短暫的,系統只是快速的經過這些狀態到底其他狀態。比如,系統調用完onCreate()函數後,很快就調用onStart(),接著很快又調用onResume()。

這些就是生命周期的基礎知識,下面我們將要學習一些特定的生命周期行為。

指定你程序的啟動Activity

當用戶點擊圖標啟動程序的時候,系統會調用你聲明為"launcher"(或者"main")的activity中的onCreate()函數。這個activity就是你的程序界面的主入口。

你可以在AndroidManifest.xml中定義哪個activity是主activity。

主activity必須在清單文件中使用<intent-filter>包含MAIN行為和LAUNCHER分類。比如:

  1. <activity
  2. android:name=".MainActivity"
  3. android:label="@string/app_name" >
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. <category android:name="android.intent.category.LAUNCHER" />
  7. </intent-filter>
  8. </activity>

提示:當你使用SDK工具創建工程時,默認已經包含一個activity類,並且清單文件中已經聲明了這個過濾。

如果一個程序中沒有定義任何的MAIN行為或者LAUNCHER分類,那麼你的程序圖標不會出現在屏幕的程序列表中。

創建一個實例

大部分程序都會包含多個不同的activity,允許用戶執行不同的行為。不過你以什麼方式創建一個activity實例,你都需要先執行onCreate()函數。

你必須在onCreate()函數中實現程序的啟動邏輯,在整個生命周期中,整個函數只會執行一次。比如,你必須在onCreate()函數中定義你用戶界面,實例化一些類的作用域變量。

比如,下面的onCreate()代碼執行了activity的一些基本設置,聲明用戶接口(在XML文件中定義),定義成員變量,配置UI。

  1. TextView mTextView; //成員變量
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. // 設置用戶界面布局
  6. // 這個布局文件定義在 res/layout/main_activity.xml 文件中
  7. setContentView(R.layout.activity_main);
  8. // 初始化成員變量,一會我們能夠操作它
  9. mTextView = (TextView) findViewById(R.id.text_message);
  10. // 確保你能在蜂巢或者更高版本中才能使用ActionBar API
  11. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  12. // 確保程序圖標在工具欄中不表現成一個按鈕
  13. ActionBar actionBar = getActionBar();
  14. actionBar.setHomeButtonEnabled(false);
  15. }
  16. }

警告:使用SDK_INT組織老的系統去執行新API支持的方法,否則老版本會產生一個運行錯誤。

當執行完onCreate()函數後,系統馬上連續執行onStart()和onResume()函數。你的activity永遠不會處於Created或者Started狀態。理論上說,在調用onStart()的時候activity已經處於可見狀態了,但是onSumed()馬上就會接著執行,並保持狀態在Resumed,直到一些事情的發生改變它的狀態,比如接電話,啟動其他activity,變換屏幕方向。

Copyright © Linux教程網 All Rights Reserved