Android提供了一個包含各種服務的應用程式框架, 為應用開發人員提供了標準的應用程式開發方法,應用開發人員只需通過四種組件的使用,實現組件提供的相關介面及提供應用用到的資源,布局及工程XML檔案,最後打包成一個APK檔案就可以完成應用程式的開發。
Android架構借鑒了J2EE架構的許多設計思想,架構提供完善的服務給服務者使用, 應用程式由一個個組件組成,通過組件的啟動來啟動應用程式,應用程式組件藉助架構運行在架構之中,架構起到了應用伺服器和容器的焦色,負責為應用程式組件提供運行環境,控制應用程式組件的生命週期。
Android架構如何?控制應用程式組件的生命週期的呢?
主要是主動性架構API的提供,主動性架構API的實現是藉助採用反向回調( IOC)機制(又稱為好萊塢原則,別調用我們,我會調用你)的模板模式來完成的。模板模式是整個ANDROID架構的核心,採用模板模式,架構為需要控制的應用程式組件在其組件基類中提供了鉤子, 架構通過調用鉤子實現組件的生命週期控制。因此應用程式只需在組件的衍生類別中重新實現鉤子函數(Function Overriding),既可以實現應用程式的客制化功能,又可以實現架構主動調用應用程式,控制應用程式的運行和生命週期的目的。
這樣既可以實現多樣化的應用,又能夠使應用程式開發遵循同樣的架構API,因此提供主動性架構API是ANDROID 架構的特徵,也是目前大多數架構普遍採用的方式,如J2EE架構、NET架構。
Android 架構提供的四大基本組件:
Activity: Android 應用程式的UI(User Interface)組件,3.0以上版本又增加了Fragment。Fragment附屬和依賴於Activity,作用象一個"sub activity",可以帶有自己的UI,在Activity運行期間也可以具有自己獨立的生命週期( 增加刪除), 能夠接收輸入事件.能夠在不同的Activity中 重用。
Service: 非UI功能的幕後處理組件。
Broadcast receiver: 可隨時被啟動來處理Intent,並執行其任務的組件。
Content provider: 實現跨程式的共用資料之組件,提供應用程式用到的資料來源。
活動和服務是主要的運行組件,架構為兩者通過IOC機制提供生命週期鉤子,並在基類中提供了預設實現,鉤子由架構來調用,應用程式通過派生基類,重新實現鉤子回呼函數,實現應用程式的客制化。
活動的基類為activity ,服務的基類為SERVICE ,兩者都提供了鉤子的預設實現。
兩者都派生自Context,具體類圖如下:
這裡採用的是Bridge模式,ContextImpl是Context虛擬類的實作類別,提供與架構互動的功能,如啟動另外的活動或服務,登記廣播接收器和發送廣播,獲得系統服務管理介面。ContextWrapper是對ContextImpl類的封裝,SERVICE類和Activity類都是ContextWrapper的衍生類別,SERVICE類直接派生自ContextWrapper,Activity間接派生自ContextWrapper的子類ContextThemeWrapper,SERVICE類和Activity類分別在ContextWrapper和ContextThemeWrapper類的介面基礎上添加和實現了各自的生命週期回調介面(鉤子),ContextThemeWrappe的功能是在ContextWrapper基礎上添加了Them的支援及在通過getSystemService介面返回服務管理對象時對於LAYOUT_INFLATER_SERVICE服務做了特殊處理,採用原形模式返回一個LayoutInflater對象的複製對象。
Activity提供的鉤子,每一個對應一個生命週期狀態,onCreate(活動建立時調用),onStart(活動將要顯示時調用),onResume( 活動已經處於可視狀態時調用),onPause(另一個活動獲得焦點,本活動將要暫停時調用),onStop(活動停止時不再可視時調用),onDestroy(活動將要釋放時調用).
回調介面實現例子:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//繼承預設實現
// 在此添加新的功能
}
活動的完整生命週期
而Fragment至少需要實現如下三個回調:
onCreate()
建立fragmet時調用;
onCreateView()
在fragmet首次顯示時調用,在該回調中實現fragmet與布局視圖的綁定,並返回對應fragmet布局的根視圖,如果fragmet沒有UI,返回NULLL。
onPause()
使用者離開fragmet時調用。
其它可以實現的回調:
onAttach(Activity activity)
當fragment 與activity綁定時調用
onActivityCreated()
當活動的onCreate()返回時調用。
onDestroyView()
當與fragment 綁定的視圖被移走時調用。
onDetach()
當fragment與活動Detach時調用
onDestroy()
當fragment釋放後調用
另外還有onStart(),onStop(),onResume(),onPause(),這些介面都與綁定的活動對應的狀態對應,在綁定的活動相應狀態回調介面調用時同時也被調用。
下面是Fragment與附屬的Activity生命週期的對應圖
服務的提供的鉤子回調介面包括onCreate(服務建立時調用),onStartCommand(使用者通過startService啟動服務,服務將啟動時調用),onBind(客戶通過調用bindService將要綁定到服務時調用,該介面返回一個BINDER對象給客戶,客戶使用該BINDER對象與綁定服務通訊),onUnbind(客戶通過調用unbindService已經與服務去綁定時調用),onRebind(客戶通過unbindService與服務去綁定,然後重新bindService時調用),onDestroy(服務不再使用被釋放時調用)。
服務生命週期圖形
架構為廣播接收器組件BroadcastReceiver及內容提供者ContentProvider組件提供了虛擬基類,應用程式需要實現他們的衍生類別. 廣播組件只有一個介面需要在衍生類別中實現--onReceive介面(收到訊息時由架構調用)。而內容提供者組件至少需要在衍生類別中實現onCreate介面(建立時由架構調用) , query介面(用來資料記錄查詢),getType介面(返回給定URI對應資料的MIME類型),update介面(更新資料記錄用),insert介面(插入資料記錄),delete介面(刪除資料記錄),這些介面除了onCreate由架構調用外其它都有客戶調用,這是內容提供者組件與其它組件不一樣的地方。
歡迎轉載,轉載時請尊重原創註明出處。