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

在之前的學習中,我們一直都在MainActivity這樣的單個活動界面進行各種操作的,而在實際應用中需要多個頁面的跳轉來增加和用戶的交互性。那么本篇將圍繞Activity展開,簡單了解Activity各個生命周期,討論如何創建Activity,其中涉及到AndroidManifest配置文件,最后討論如何使用Activity實現有無結果的頁面跳轉的方法。本篇內容目錄如下:

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

1.AndroidManifest配置文件

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

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

xlmns:android指定了Android的命名空間,默認情況下是http://schemas.android.com/apk/res/android。
package是標準的應用包名,也是一個應用進程的默認名稱,為避免命名空間的沖突,一般會以應用的域名來作為包名。
一般情況這部分不需要做改動。

(2)組件部分:由一個application標簽包裹著安卓四大組件。

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

下面主要看Activity標簽:

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

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

2.Activity生命周期

下圖表示了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活動判斷哪個頁面返回的消息,在復雜情況下返回的頁面太多時,每個頁面的唯一標號能更好的幫助它們辨識彼此?,F在再回頭看看那幾個關鍵方法里的requestCode和resultCode是不是就理解了呢?

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,422評論 25 708
  • ¥開啟¥ 【iAPP實現進入界面執行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,535評論 0 17
  • 2016年鄭州的房價瘋了,我也跟著瘋了。 從15年開始看房,當時想買公司附近的二手房,相中的房子因為沒有房本覺得交...
    ReleaseU閱讀 154評論 0 0
  • 這段日子,從離開學校到公司,起初是興奮和憧憬的,終于知道自己三年的東西是做什么了,可是呢,生活總是不經意給你一點“...
    shali薛閱讀 325評論 0 0
  • Too big to fall(中譯:大而不倒)是一部講述2008年爆發的全球金融危機的電影。紀錄了在幾周之內決定...
    我是朱舟閱讀 915評論 0 0