偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

深度解析Android Activity初探

移動(dòng)開(kāi)發(fā) Android
Activity是一個(gè)應(yīng)用中的組件,它為用戶提供一個(gè)可視的界面,方便用戶操作,比如說(shuō)拔打電話、照相、發(fā)郵件或者是瀏覽地圖等。每個(gè)activity會(huì)提供一個(gè)可視的窗口,一般情況下這個(gè)窗口會(huì)覆蓋整個(gè)屏幕,但在某此情況下也會(huì)出現(xiàn)一些比屏幕小的窗口飄浮在另外一相窗口上面。類(lèi)比Windows當(dāng)中的概念,Activity相應(yīng)于一個(gè)Dialog(MFC)或者是Form(C#),它為用戶提供一個(gè)可視的界面。

Activity概述 

 一個(gè)應(yīng)用當(dāng)中通常有若干個(gè)關(guān)系松散的activities組成。通常情況下,一個(gè)應(yīng)該中有一個(gè)activity是主activity,它會(huì)在應(yīng)用程序加載時(shí)展現(xiàn)出來(lái),之后每個(gè)activity都有機(jī)會(huì)啟動(dòng)其他activity,從而產(chǎn)生不同的動(dòng)作。每當(dāng)一個(gè)新的activity啟動(dòng)的時(shí)候,它的前一任就會(huì)停下來(lái),這時(shí)系統(tǒng)將前任放在一個(gè)棧(后臺(tái)棧)中。這個(gè)后臺(tái)棧遵循先進(jìn)后出原則,所以當(dāng)用戶對(duì)當(dāng)前activity完成操作并按后退鍵時(shí),原來(lái)?xiàng)V械腶ctivity就會(huì)從棧中彈出,恢復(fù)執(zhí)行。(我們會(huì)在任務(wù)和后臺(tái)棧中詳細(xì)討論后臺(tái)棧)

新activity啟動(dòng),舊activity停止,這些操作會(huì)通過(guò)調(diào)用activity的生命周期回調(diào)函數(shù)來(lái)進(jìn)行通知。對(duì)于activity來(lái)說(shuō),它可能會(huì)收到很多回調(diào),這些回調(diào)會(huì)在系統(tǒng)創(chuàng)建、停止、恢復(fù)或者銷(xiāo)毀一個(gè)activity時(shí)調(diào)用,這樣,activity就有機(jī)會(huì)感知變化進(jìn)行在相應(yīng)的回調(diào)中做出正確的處理。例如,當(dāng)activity停止時(shí),它應(yīng)該釋放掉所有的大型對(duì)象,比如說(shuō)網(wǎng)絡(luò)連接或數(shù)據(jù)庫(kù)連接。當(dāng)activity恢復(fù)執(zhí)行時(shí),可以重新獲取需要的資源并從中斷處重新運(yùn)行。這些狀態(tài)的變化就是一個(gè)activity的生命周期。

創(chuàng)建一個(gè)Activity

創(chuàng)建一個(gè)Activity,必須要繼承Activity或者是繼承它相應(yīng)的子類(lèi)。在我們的子類(lèi)當(dāng)中,還需要實(shí)際一系列與生命周期轉(zhuǎn)化密切相關(guān)的接口函數(shù),比如說(shuō)創(chuàng)建、停止、恢復(fù)或銷(xiāo)毀等回調(diào)接口。最重要的兩個(gè)回調(diào)函數(shù)是:

onCreate()

必須要實(shí)現(xiàn)的方法。當(dāng)我們的Activity創(chuàng)建的時(shí)候,系統(tǒng)會(huì)調(diào)用此方法。在我們實(shí)現(xiàn)當(dāng)中,需要初始化activity當(dāng)中重要的組件。需要強(qiáng)調(diào)的是,在這個(gè)方法里,需要調(diào)用setContentView()來(lái)為activity的用戶界面調(diào)用布局。

onPause()

當(dāng)用戶離開(kāi)activity的時(shí)候,系統(tǒng)會(huì)調(diào)用這個(gè)函數(shù)。用戶可能不再會(huì)回來(lái)調(diào)用此activity,因此需要在本方法中把需要永久存儲(chǔ)的數(shù)據(jù)進(jìn)行提交。

除了這兩個(gè)方法之外,在activity整個(gè)生命周期中還有很多回調(diào)方法需要關(guān)注。在后面我們會(huì)討論其他回調(diào)方法的作用。

創(chuàng)建一個(gè)用戶界面

Activity的用戶界面是由View來(lái)控制的。每個(gè)view控制著一片矩形區(qū)域并會(huì)對(duì)用戶的操作進(jìn)行反饋。例如,一個(gè)view可能是一個(gè)按鈕,當(dāng)用戶按下時(shí),它會(huì)觸發(fā)一個(gè)事件。

Android系統(tǒng)提供了不少內(nèi)置的view,我們可以用它們來(lái)設(shè)計(jì)我們的布局。"Wedgets"是一類(lèi)可以顯示的views,比如說(shuō)button,textfiled,checkbox或者image。"Layouts"是從ViewGroup繼承出來(lái)的類(lèi),它可以提供一種固定的布局模式,比如說(shuō)linear layout,grid layout,或者relative layout。我們當(dāng)然還可以繼承View和ViewGroup來(lái)實(shí)現(xiàn)自己的控件和布局。

使用views最常見(jiàn)的方式是在資源文件中的XML中定義它。這種方式可以使設(shè)計(jì)和行為的源代碼分開(kāi)。我們可以通過(guò)調(diào)用setContentView()來(lái)為Activity設(shè)置布局。不過(guò),我們也可以在代碼中添加Views,首先往ViewGroup中插入相應(yīng)的Views,再將ViewGroup的根元素傳遞給setContentView()即可。

在manifest中聲明activity

必須在manifest文件中聲明activity,不然系統(tǒng)可以無(wú)法訪問(wèn)我們的activity。步驟是,打開(kāi)manifest文件,為<application>元素添加一個(gè)叫<activity>的子元素。

java代碼:

  1. <manifest ... >   
  2. <application ... >   
  3. <activity android:name=".ExampleActivity" />   
  4. </application ... >   
  5. </manifest > 

這里還可以定義其他一些屬性,比如說(shuō)定義標(biāo)簽,圖標(biāo)或者是UI的樣式等。使用intent filters      一個(gè)Activity可以具有多個(gè)intent filters(具體方式是在配置文件中聲明<intent-filter>),這樣可以方便其他activity訪問(wèn)??梢岳斫獬梢粋€(gè)能力描述符,用來(lái)標(biāo)識(shí)自己有哪些處理能力,當(dāng)其他activity需要處理相應(yīng)請(qǐng)求時(shí),可以找到這個(gè)activity。

當(dāng)使用Android SDK工具創(chuàng)建一個(gè)新的應(yīng)用時(shí),工具會(huì)自動(dòng)幫我們創(chuàng)建一個(gè)filter,它的樣式如下:

java代碼:

  1. <activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">   
  2. <intent-filter>   
  3. <action android:name="android.intent.action.MAIN" />   
  4. <category android:name="android.intent.category.LAUNCHER" />   
  5. </intent-filter> 
  6. </activity> 

<action>元素說(shuō)明這是應(yīng)用程序的"main"入口。<category>元素表示該activity會(huì)被記錄在系統(tǒng)的啟動(dòng)器當(dāng)中(允許用戶啟動(dòng)這個(gè)activity)。如果我們不想讓自己的應(yīng)用被其他應(yīng)用訪問(wèn)的話,就無(wú)需再多聲明fileters了。在一個(gè)應(yīng)用當(dāng)中只有一個(gè)activity的filter可以有main action和launcher category。對(duì)于沒(méi)有聲明filters的activities,可以通過(guò)在intent中明確指出要調(diào)用的activity的類(lèi)來(lái)啟動(dòng)它。      

如果我們想讓我們的activity接收其他activity的訪問(wèn)并返回給對(duì)方結(jié)果的話,我們必須額外地再添加filters。對(duì)于我們想要回復(fù)的filters,我們必須在<intnent-filter>下面添加<action>元素,也可以選擇性地包含<category>元素和<data>元素。      

欲知更多關(guān)于intents的情況,啟動(dòng)Activity 可以通過(guò)調(diào)用startActivity()來(lái)啟動(dòng)另外一個(gè)Activity,只需要傳遞相應(yīng)的Intent參數(shù)描述被啟動(dòng)項(xiàng)即可。Intent可以描述需要啟動(dòng)的Activity,也可以描述啟動(dòng)時(shí)需要的動(dòng)作,還可以帶有少量的數(shù)據(jù)。當(dāng)工作在自己的應(yīng)用當(dāng)中時(shí),我們經(jīng)常需要啟動(dòng)某個(gè)activity。這時(shí),我們可以在intent當(dāng)中指定要啟動(dòng)的activity的類(lèi)名。例如,我們想啟動(dòng)一個(gè)類(lèi)名為SignInActivity的activity,會(huì)使用如下代碼:

java代碼:

  1. Intent intent = new Intent(this, SignInActivity.class);  
  2. startActivity(intent); 

如果我們的應(yīng)用還想做一些額外動(dòng)作,比如說(shuō)發(fā)送郵件、發(fā)送短信等。但可能我們的應(yīng)用本身不具備這樣的功能,這時(shí)我們就要請(qǐng)求系統(tǒng)當(dāng)中有這種能力的應(yīng)用來(lái)幫我們。做這件事情比較簡(jiǎn)單,我們只需要?jiǎng)?chuàng)建一個(gè)intent,設(shè)置我們想要執(zhí)行的動(dòng)作,設(shè)置需要的數(shù)據(jù),然后發(fā)送出去即可。這時(shí),如果系統(tǒng)當(dāng)中有多個(gè)應(yīng)用可以提供這些功能,系統(tǒng)會(huì)提示用戶去選擇一個(gè)應(yīng)用。具體代碼如下:

java代碼:

  1. Intent intent = new Intent(Intent.ACTION_SEND);  
  2. intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);  
  3. startActivity(intent); 

為EXTRA_EMAIL添加的數(shù)據(jù)是一個(gè)字符串?dāng)?shù)組,其中包含郵件列表。當(dāng)郵件應(yīng)用回應(yīng)這個(gè)intent時(shí),它會(huì)讀取數(shù)組中的地址,然后設(shè)置郵件格式,發(fā)送郵件。以需要返回結(jié)果的方式啟動(dòng)Activity有時(shí),我們可能需要從我們啟動(dòng)的activity當(dāng)中獲取結(jié)果。這時(shí),我們?cè)趩?dòng)activity時(shí)就要調(diào)用startActivityForResult()方法。然后,我們?cè)谀慕邮辗祷氐臄?shù)據(jù)呢?按照android的習(xí)慣,此時(shí)我們需要實(shí)現(xiàn)一個(gè)回調(diào)接口onActivityResult()。當(dāng)我們啟動(dòng)的activity完成時(shí),它會(huì)以intent的形式在onActivityResult()中返回。     

例如,我們需要用戶去選擇一個(gè)聯(lián)系人,然后再對(duì)這些聯(lián)系人做一些操作。下面的代碼演示了這個(gè)過(guò)程:

java代碼:

  1. private void pickContact(){   
  2. Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);   
  3. startActivityForResult(intent, PICK_CONTACT_REQUEST);  
  4. }  
  5. @Override  
  6. protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
  7. if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {   
  8. Cursor cursor = getContentResolver().query(data.getData(), new String[] {Contacts.DISPLAY_NAME}, null, null, null);   
  9. if (cursor.moveToFirst()) {   
  10. int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);   
  11. String name = cursor.getString(columnIndex);   
  12. }  
  13. }  

【編輯推薦】

Activity頁(yè)面切換的效果

Android四種Activity的加載模式

Android開(kāi)發(fā)中插入新的Activity

Android應(yīng)用——Activity傳參數(shù)與跳轉(zhuǎn)

Android Activity和Intent機(jī)制學(xué)習(xí)筆記

責(zé)任編輯:zhaolei 來(lái)源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2010-02-06 10:14:36

Android Act

2021-10-12 11:07:33

動(dòng)畫(huà)深度Android

2011-05-27 17:28:01

Android

2022-04-27 08:37:54

系統(tǒng)Linux

2010-07-13 09:08:27

Widget開(kāi)發(fā)

2011-06-16 10:25:29

AndroidAIR

2012-07-09 10:22:28

Mono for An

2016-03-24 14:02:05

ActivityAndroid啟動(dòng)

2024-01-11 12:14:31

Async線程池任務(wù)

2011-04-15 13:24:27

Android 3.0Android蜂巢

2014-10-15 09:35:26

Android Wea

2011-05-26 16:28:08

Android jQuery

2011-09-07 10:58:07

Android wid

2023-10-24 19:37:34

協(xié)程Java

2023-03-27 08:12:40

源碼場(chǎng)景案例

2023-10-10 11:02:00

LSM Tree數(shù)據(jù)庫(kù)

2013-12-09 10:34:12

2023-03-06 11:13:20

Spring注解加載

2023-03-13 08:12:25

@DependsOn源碼場(chǎng)景

2013-01-08 13:33:07

Android開(kāi)發(fā)Activity入門(mén)指南
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)