A03_a_Android应用框架的四大组件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A03_a_Android應用框架的四大組件⏹4個嫡系基類:
Activity
Service
BroadcastReceiver
ContentProvider
Android母框架裡提供了4個一等公民(或稱為嫡系)的基類,包括:
●Activity: 處理UI互動的事情
●Service:幕後服務(如硬件及Driver的服務)
●BroadcastReceiver: 接收訊息及事件處理
●ContentProvider: 儲存共用資料
如下圖所示:
圖1 Android 框架裡的4個嫡系基類
基於這些基類,地頭蛇就可以撰寫AP子類,如下圖:
圖2 平台與應用兩種知識的結合
這4種應用子類都是由Android框架來負責創建(Create or New)其對象(Object)的。不過有趣的是:
●平台框架基類寫在先
●應用子類寫在後
那麼框架事先又如何知道應用開發者後來撰寫的應用子類的名稱呢? 如果不知道應用子類的名稱,又如何創建應用子類的對象呢? 答案是:依賴AndroidManifest.xml文檔。例如:
// AndroidManifest.xml
package="com.misoo.pkm"> android:name="android.permission.INTERNET"> android:label="@string/app_name"> android:label="@string/app_name">
在執行階段(Run-time),Android框架讀取這個由地頭蛇所寫的XML文檔。於是框架得知AP裡撰寫了3個嫡系應用子類,如下圖:
圖3 框架創建嫡系應用子類的對象
這些應用子類的對象可以全部在同一個進程(Process)裡執行,也可以在不同的進程裡執行。例如,框架從上述AndroidManifest.xml裡讀到:
框架就會將LoadService應用子類的對象誕生於獨立的進程(名稱叫“remote”)裡。於是,FirstActivity與LoadService之間就屬於跨進程的溝通了。這種跨進程的溝通,就是大家熟知的IPC(Inter-Process Communication)機制了。待會兒,將會特別介紹Android母框架裡的IPC機制。◆
⏹Intent-based Programming技術
Android的4種嫡系應用子類之間如何互相溝通呢?其實很簡單,就像你打手機去車行叫出租車,而不是直接到街道上叫車。你送給行一個短信或一通電話,表明你的「意圖」(Intent),當車行服務員接到此意圖,就依據你的意圖的內含條件而去挑選最合適的車,然後派遣它去接你。
於是,母框架裡所提供的Intent就扮演它們之間的溝通媒介。這4種嫡系對象都是由Android去配對及啟動的,並不是組件之間透過直接呼叫而啟動的。「意圖」(Intent)本身是定義為一個類(Class),一個Intent對象表達一個期望(Expectation),敘述其所期望的服務或動作。Android框架則根據此Intent 對象之敘述,負責配對,找出相配的組件,然後將Intent對象傳遞給所找到的對象,於是Android框架的媒婆任務就完成了。
因此,Intent對象扮演著媒體仲介的角色。例如,提供「Activity組件→Android框架→ContentProvider組件」之間互相溝通的相關資訊,實現了Activity組件與ContentProvider組件之間『不知而亦能用』之效果,這又稱為疏結合(Loosely-coupled)效果。其創造了Service組件抽換的自由度,這又稱為PnP(Plug and Play)。茲以下圖為例:
圖4 Intent對象扮演著媒體仲介的角色