歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android Training - 開始一個Activity

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

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

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

Copyright © Linux教程網 All Rights Reserved