學習筆記 AS入門(四) 組件篇之Activity

在以前的學習中,咱們一直都在MainActivity這樣的單個活動界面進行各類操做的,而在實際應用中須要多個頁面的跳轉來增長和用戶的交互性。那麼本篇將圍繞Activity展開,簡單瞭解Activity各個生命週期,討論如何建立Activity,其中涉及到AndroidManifest配置文件,最後討論如何使用Activity實現有無結果的頁面跳轉的方法。本篇內容目錄以下:

  • Manifest配置文件
  • Activity生命週期
  • Activity的建立方法
  • 頁面跳轉的實現

1.AndroidManifest配置文件android

AndroidManifest.xml是整個應用的主配置清單文件,包括應用的包名、版本號、組件、權限等信息,它用來記錄應用的相關的配置信息。它在main文件夾下,從圖中可看出在manifest大標籤下有各類各樣的標籤,接下來將從全局、組件和權限三個方面解讀AndroidManifest裏的經常使用標籤。網絡

(1)全局部分:manifest是AndroidManifest.xml配置文件的根標籤, 必須指定xlmns:android和package屬性, 且只包含一個application節點。app

xlmns:android指定了Android的命名空間,默認狀況下是http://schemas.android.com/apk/res/androidpackage是標準的應用包名,也是一個應用進程的默認名稱,爲避免命名空間的衝突,通常會以應用的域名來做爲包名。 通常狀況這部分不須要作改動。ide

(2)組件部分:由一個application標籤包裹着安卓四大組件。佈局

在application標籤下有幾個面向全局的屬性:android:icon(圖標)、android:label(標題)、android:theme(主題樣式)。 而在application標籤裏面包裹着安卓四大組件:activity(活動)、service(服務)、content provider(內容提供者)以及broadcast receiver(廣播接收者)。其中activity就是本篇的重點,它是一個應用程序經過屏幕提供給用戶進行交互界面的Android組件,其餘三個組件還沒用到,後續介紹。在這四個組件添加到application時,必定要聲明android:name屬性,值以包名.類名的形式,其中包名(package)可省寫成 .類名 便可。post

下面主要看Activity標籤:學習

每在Android應用中添加一個Activity都必須在AndroidManifest.xml配置文件中聲明, 不然系統將不識別也不執行該Activity。當application下有多個Activity,可用 intent-filter表示當前這個Activity是主頁面。this

(3)權限部分:權限就是當用戶安裝應用程序的時候,提示用戶該程序爲提供服務必須得到的權限。可用uses-permission標籤聲明一系列系統權限,須要的時候添加就能夠,以下圖就是一個申請訪問網絡的權限;固然也能夠自定義權限,用到permission標籤,並用name惟一標識自定義權限的名稱,在其餘應用程序中必須有這個name的permission才能訪問到該應用程序,故目的是保護該程序裏重要的組件。spa

2.Activity生命週期3d

下圖表示了Activity從建立到銷燬的一個完整的生命週期,包含七種方法和四種狀態,下面分別介紹一下。

(1)七種方法:

(2)四種狀態:(爲方便起見用字母表明方法)

活動狀態:Activity處於頁面最頂端。當啓動應用時,將依次調用方法A->B->C,使應用得到焦點處於活動狀態。

暫停狀態:Activity失去焦點,但此時對用戶可見。好比當另外一個Activity在前一個Activity之上,而前一個Activity又是可見的而且部分透明或者沒有覆蓋整個屏幕時,該Activity會調用方法D失去焦點。返回到該Activity後又會調用C方法使它又處於活動狀態。

中止狀態:Activity徹底被遮擋,但此時還保留全部狀態和成員信息。好比當按下Home鍵使得應用處於後臺,這個過程調用方法D->E,應用處於暫停狀態;當從新回到應用,這個過程調用方法G->B->C,使應用再次得到焦點。

非活動狀態:Activity被銷燬。當退出應用時,調用方法D->E->F最後整個應用被銷燬。

3.Activity的建立方法

在簡單瞭解配置文件和生命週期以後,接下來就能夠用activity生命週期裏一個重要方法—— onCreate() 實現如何建立一個Activity了。共四步:

step1:新建一個類,並繼承AppCompatActivity類或Activity類。與Activity類不一樣的是,AppCompatActivity默認帶標題欄,在v7包,且Android studio的工程也是默認繼承AppcompatActivity類。

step2:重寫方法onCreate()。

step3:用setContentView()方法設置在該Activity上顯示的佈局文件。

step4:最後必定要在AndroidManifest配置文件聲明該Activity, 若是是主活動須要加上 intent-filter標籤。

這樣應用中就有多個活動頁面,那如何實現頁面之間的跳轉呢?這裏須要引入一個重要的類:Intent類(意圖),它能夠協助完成Android各個組件之間的通信,充當信使的做用。接下來就用Intent意圖實現無結果和有結果的頁面跳轉功能,demo是經過點擊按鈕實現兩個頁面之間的跳轉,以下圖展現的效果。

4.頁面跳轉的實現

(1)無結果的頁面跳轉

首先建立好兩個Activity,注意在AndroidManifest給FirstActivity添加標籤 intent-filter。

上述準備工做都完成後,Intent意圖就能夠開始它的表演了!在button點擊事件裏初始化一個Intent對象,並給予兩個參數告訴Intent從哪一個頁面跳轉到那個頁面,須要注意的是若是用匿名內部類方式註冊點擊事件,初始化Intent時直接用this是訪問不到當前activity的,兩種可行辦法:第一種辦法用activity類名.this引用,第二種辦法在方法外初始化一個全局變量並給它賦值this,這時引用該成員變量便可。最後用startActivity方法執行意圖就完成了,具體代碼和註解以下。

能夠看到實現無結果的頁面跳轉很容易,只用意圖就能夠作到,那如何讓第二個頁面返回結果給第一個界面呢,這個時候須要在兩個界面上多作些文章了。

(2)有結果的頁面跳轉

step1.首先在當前頁面onCreate方法裏換一種執行意圖的方法,具體步驟以下:

1)註冊點擊事件

2)初始化一個Intent對象,參數表示(上下文對象,目標文件),意圖從當前頁面跳轉到目標頁面

3)用方法startActivityForResult執行意圖,參數表示(Intent對象,請求訪問界面即主動方的int型標誌)
複製代碼

這裏我用startActivityForResult(intent, 1)給第一個頁面標號爲1,那麼給它一個獨有的標誌有什麼做用呢?且不要着急看到最後就會明白了。

step.2.而後在目標頁面onCreate方法裏準備回傳的數據:

1)註冊點擊事件

2)初始化一個Intent對象,但不須要實現跳轉,而須要用它的方法putExtra存儲須要
回傳的數據

3)用方法setResult回傳數據,參數表示(被請求訪問界面即被動方的int型標誌,Intent對象)

4) 用finish()結束目標頁面的進程
複製代碼

這時候又會發現我用setResult(2,data)給第二個頁面標號爲2,而且還帶着intent對象data,冥冥之中這些標誌彷佛要搞個大事情......

step.3 最後再回到當前頁面,用方法onActivityResult接收回傳數據,參數表示(請求訪問界面即主動方的int型標誌,被請求訪問界面即被動方的int型標誌,Intent對象)

看到這裏就驗證了以前的預感是對的,能看到前面的精心準備——標號1,標號2還有從第二個頁面傳回的Intent對象都在這個方法裏實現了本身的價值。其實也能夠這樣理解,onActivityResult這個方法裏的參數resultcode,是方便當前FirstActivity活動判斷哪一個頁面返回的消息,在複雜狀況下返回的頁面太多時,每一個頁面的惟一標號能更好的幫助它們辨識彼此。如今再回頭看看那幾個關鍵方法裏的requestCode和resultCode是否是就理解了呢?

>關於Activity和Intent就學習到這裏,從下一篇開始,將用幾篇的篇幅介紹幾種高級控件,感謝觀看~

相關文章
相關標籤/搜索