Android四大組件

一、Activity
Activity是一個Android應用程序組件(也稱為Android四大組件之一),它提供了一個屏幕,用戶可以通過該屏幕進行交互以執(zhí)行某些操作,例如撥打電話,拍照,發(fā)送電子郵件或查看地圖。每個活動都有一個窗口,用于繪制其用戶界面。
1.Activity的生命周期
onCreate()->onStart()->onResume()->[Activity is running]->onPause()->onStop()->onDestry()
onPause()->onRestart()->onStart()->onResume()->[Activity is running]
如圖:

2.Activity的啟動模式
(1)? standard
????? 標準啟動模式;
????? 如果一個Activity的啟動模式被設置成standard,那么它可以無限制的創(chuàng)建。你每一次通過Intent去啟動這種模式的Activity都會重新創(chuàng)建一個activity。
(2) singleTask
????? 在棧中唯一一個
????? 如果系統(tǒng)中已經(jīng)存在了該種啟動模式的目標Activity,則系統(tǒng)并不會重新創(chuàng)建一個目標Activity,而是首先將持有目標Activity的整個任務棧都會被置于前臺(用戶可見) 。
(3) singleTop
????? 在棧中最上面的一個
????? 如果在啟動這種模式的Activity的時候,當前任務棧的頂端已經(jīng)存在了相同的Activity,那系統(tǒng)就不會再創(chuàng)建新的,而是回調任務棧中已經(jīng)存在的該Activity的onNewIntent( )方法。
(4) singleInstance
????? 棧中唯一一個
????? 這種啟動模式和singleTask幾乎一樣,它也只允許系統(tǒng)中存在一個目標Activity,包括上面我們所說的SingleTask的一些特性singleInstance都有。唯一不同的是,持有目標Activity的任務棧中只能有目標Activity一個Actvitiy,不能再有別的Activity,對! 就是承包了這個任務棧。
3.Activity橫豎屏切換
(1)不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執(zhí)行1次,切豎屏時會執(zhí)行1次。
(2)設置Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執(zhí)行一次。
(3)設置Activity的android:configChanges="orientation|keyboardHidden|screenSize"時,切屏不會重新調用各個生命周期,只會執(zhí)行onConfigurationChanged方法。
(4)設置Activity的android:configChanges="orientation|keyboardHidden|screenSize"時,切屏切記要加上screenSize,否則4.0版本以上生命周期不生效。
4.Fragment生命周期

5.Activity與Fragment生命周期對應

? (1)onAttach( ):當Fragment與Activity綁定、關聯(lián)的時候調用;
(2)onCreateView( ):創(chuàng)建該Fragment對應的視圖,并把視圖返回給調用者,與onCreate( )的區(qū)別是你可以在onCreate( )中初始化與View無關的東西;
(3)onActivityCreated( ):在Activity完成其onCreate()方法后調用;
(4)onDestroyView( ):當Fragment銷毀視圖的時候調用;
(5)onDetach( ):當Fragment與Activity脫離關系的時候調用;
二、Service?
Service是Android的四大組件之一,它是用來進行后臺操作的,它并不為用戶提供界面,所有的操作都在后臺完成,它的所有操作對用戶都是不可見的。一旦其他的組件啟動了一個Service,它會在后臺一直運行,即便是用戶切換到了其他的應用中。其他的組件也可以綁定Service進而啟動一個Service,甚至可以用它來進行IPC(進程通信,inter process communication). Service可以進行的操作有很多,比如說網(wǎng)絡通信,音樂播放,文件的I/O操作,以及和Content Provider進行交互。
1.Service的生命周期

2.Service的2種啟動方式
(1)startService()
通過startService啟動后,service會一直無限期運行下去,只有外部調用了stopService()或stopSelf()方法時,該Service才會停止運行并銷毀。
(2)bindService()
1.bindService啟動的服務和調用者之間是典型的client-server模式。調用者是client,service則是server端。service只有一個,但綁定到service上面的client可以有一個或很多個。這里所提到的client指的是組件,比如某個Activity。
2.client可以通過IBinder接口獲取Service實例,從而實現(xiàn)在client端直接調用Service中的方法以實現(xiàn)靈活交互,這里再通過startService方法啟動中是無法實現(xiàn)的。
3.bindService啟動服務的生命周期與其綁定的client息息相關。當client銷毀時,client會自動與Service解除綁定。當然,client也可以明確調用Context的unbindService()方法與Service解除綁定。當沒有任何client與Service綁定時,Service會自行銷毀。
3.Service與IntentService的區(qū)別
IntentService是繼承并處理異步請求的一個類,在IntentService內有一個工作線程來處理耗時操作,啟動IntentService的方式和啟動傳統(tǒng)的Service一樣,同時,當任務執(zhí)行完后,IntentService會自動停止,而不需要我們手動去控制或stopSelf()。另外,可以啟動IntentService多次,而每一個耗時操作會以工作隊列的方式在IntentService的onHandleIntent回調方法中執(zhí)行,并且,每次只會執(zhí)行一個工作線程,執(zhí)行完第一個再執(zhí)行第二個,以此類推。
三、ContentProvider
ContentProvider一般為存儲和獲取數(shù)據(jù)提供統(tǒng)一的接口,可以在不同的應用程序之間共享數(shù)據(jù)。
參考:ContentProvider從入門到精通 (借用大神的)
四、BroadcastReceiver
參考:Android四大組件:BroadcastReceiver史上最全面解析(借用大神的)