Activity、Fragment和Intent

vbsentry發表於2020-10-08

Activity、Fragment和Intent

1、建立、配置和使用Activity
·建立Activity的要點
①建立一個Activity需要實現一個或多個方法
必須複寫onCreate()方法,該方法會在Activity建立時被回撥
②每一個Activity都需要在AndroidManifest.xml檔案當中進行配置;

·配置Activity
配置Activity 時通常指定如下幾個屬性:
name: 指定該Activity 的實現類的類名。
icon: 指定該Activity 對應的圖示。
label: 指定該Activity 的標籤。
exported: 指定該Activity 是否允許被其他應用呼叫。
launchMode: 指定該Activity 的載入模式, 該屬性支援standard 、
singleTop 、singleTask 和singlelnstance 這4 種載入模式。

·啟動、關閉Activity
Activity 啟動其他Activity 有如下兩個方法:
① startActivity(Intent intent): 啟動其他Activity 。
② startActivityForResult(ntent intent, int requestCode): 以指定的請求碼( requestCode )啟動Activity , 而且程式將會獲取新啟動的Activity 返回的結果(通過重寫onActivityResult(…)方法來獲取)。
Android 為關閉Activity 準備瞭如下兩個方法:
① finish(): 結束當前Activity 。
② finishActivity(int requestCode) : 結束以startActivityForResult(lntent intent, int requestCode)方法啟動的Activity 。

2、Activity 的生命週期與載入模式
·Activity 的生命週期,Activity 大致會經過如下4 種狀態。
① 執行狀態:當前Activity 位於前臺,使用者可見, 可以獲得焦點。
② 暫停狀態:其他Activity 位於前臺, 該Activity 依然可見, 只是不能獲得焦點。
③ 停止狀態:該Activity 不可見,失去焦點。
④ 銷燬狀態:該Activity 結束,或Activity 所在的程式被結束。

·在Activity 的生命週期中,如下方法會被系統回撥。
onCreate(Bundle savedStatus):建立Activity 時被回撥->onStart(): 啟動Activity 時被回撥->onRestart(): 重新啟動Activity 時被回撥->onResume() : 恢復Activity 時被回撥->onPause(): 暫停Activity 時被回撥->onStop(): 停止Activity 時被回撥->onDestroy(): 銷燬Activity 時被回撥。

·Activity的4種載入模式
standard: 標準模式,這是預設的載入模式。
singleTop : Task 棧頂單例模式。
singleTask: Task 內單例模式。
singlelnstance: 全域性單例模式。

3、Fragment詳解
·Fragment的特徵
① Fragment總是作為Activity介面的組成部分。Fragment可呼叫
getActivity()方法獲取它所在的Activity,Activity可呼叫FragmentManager的findFragmentById()或findFragmentByTag()方法來獲取Fragment。
② 在Activity執行過程中,可呼叫FragmentManager的add()、remove()、replace()方法動態地新增、刪除或替換Fragment。
③ 一個Activity可以同時組合多個Fragment;反過來,一個Fragment也可被多個Activity複用。
④ Fragment可以響應自己的輸入事件,並擁有自己的生命週期,但它們的生命週期直接被其所屬的Activity的生命週期控制。

·Fragment 管理與Fragment 事務
Activity 管理Fragment 主要依靠FragmentManager。FragmentManager
可以完成如下幾方面的功能:
①使用findFragmentByld()或findFragmentByTag()方法來獲取指定Fragment 。
②呼叫popBackStack()方法將Fragment 從後臺棧中彈出(模擬使用者按下BACK 按鍵)。
③呼叫addOnBackStackChangeListener()註冊一個監聽器, 用於監聽後臺棧的變化。
④如果需要新增、刪除、替換Fragment, 則需要藉助於FragmentTransaction 物件,FragmentTransaction 代表Activity 對Fragment 執行的多個改變。
FragmentTransaction也被翻譯為Fragmentation事務。與資料
庫事務代表了對底層陣列的多個更新操作;而Fragment 事務則代
表了Activity對Fragment 執行的多個改變操作。

·Fragment生命週期
與Activity 類似, Fragment 也存在如下狀態。
執行狀態: 當前Fragment 位於前臺,使用者可見,可以獲得焦點。
暫停狀態: 其他Activity 位於前臺,該Fragment 依然可見,只是不能獲得焦點。
停止狀態: 該Fragment 不可見, 失去焦點。
銷燬狀態: 該Fragment 被完全刪除, 或該Fragment 所在的Activity
被結束。

4、Intent屬性、過濾器和傳遞資料
·Intent物件簡述
①android 的應用程式包含三種重要元件:Activity、Service、
BroadcastReceiver,應用程式採用了一致的方式來啟動它們——都是依靠 Intent 來啟動的,Intent 就封裝了程式想要啟動程式的意圖。不僅如此,Intent 還可用於與被啟動元件交換資訊。
使用 Intent 啟動不同元件的方法
Activity :
startActivity(Intent intent)
startActivityForResult(Intent intent,int requestCode)
②Intent 物件大致包含 Component、Action、Category、Data、Type、Extra 和 Flag 這 7 種屬性
③其中 Component 用於明確指定需要啟動的目標元件,而 Extra 則用於“攜帶”需要交換的資料

·Intent的屬性及intent-filter配置
①Component屬性
Intent 的 Component 屬性需要接受一個 ComponentName 物件;
指定 Component 屬性的 Intent 已經明確了它將要啟動哪個元件,因此這種 Intent 也被稱為顯式 Intent,沒有指定 Component 屬性的 Intent 被稱為隱式 Intent;
隱式 Intent 沒有明確指定要啟動哪個元件,應用將會根據 Intent 指定的規則去啟動符合條件的元件,但具體是哪個元件則不明確。
②Action、Category 屬性與 intent-filter 配置
Action 要完成的只是一個抽象動作,這個動作具體由哪個元件(或許是
Activity,或許是 BroadcastReceiver)來完成,Action 這個字串本身並不管。
<intent-filter … ./>元素是AndroidManifest.xml 檔案中<activity…I>元素的子元素。
< action…/ >、< category…/ >子元素的配置非常簡單,它們都可以指定android:name 屬性,該屬性的值就是一個普通的字串。

③指定Action、Category呼叫系統Activity
Intent 代表了啟動某個程式元件的“意圖”,實際上 Intent 物件不僅可以啟動本應用內程式元件,也可以啟動 android 系統的其他應用程式元件,包括系統自帶的程式元件——只要許可權允許。

④ Data、Type 屬性與 intent-filter 配置
Data 屬性通常用於向 Action 屬性提供操作的資料。
Data 屬性與 Type 屬性的關係比較微妙,這兩個屬性會互相覆蓋,如果希望 Intent 既有 Data 屬性,也有 Type 屬性,則應該呼叫
Intent 的 setDataAndType()方法。

⑤Intent 的 Extra 屬性通常用於在多個 Action 之間進行資料交換,Intent 的Extra 屬性值應該是一個 Bundle 物件,Bundle 物件就像一個 Map 物件,它可以存入多個 key-value 對,這樣就可以通過Intent 在不同 Activity之間進行資料交換了。

⑥latent 的Flag 屬性用於為該Intent 新增一些額外的控制旗標, Intent 可呼叫addFlags()方法來新增控制旗標。

相關文章