Android的面向組件思想

面向組件思想是在軟件規模擴大,復雜度上升的背景下,以面向對象為基礎而提出的一種軟件設計思想。可以把它理解為一種更粗粒度的面向對象,其粒度一般大於對象,但具體要到什麼程度,又可以根據實際情況來決定。這種思想以組件為基礎,強調“服務”的概念。

面向組件具有以下特點:

低耦合性:組件之間一般互不依賴,一個組件隻需要知道另一個組件的“名字”就可以訪問它;

高重用性:系統級的重用;

高互操作性:不同的開發商開發出來的組件隻要定義好瞭接口就可以互相訪問;

進程的透明性:組件可以工作在同一個進程也可以工作在不同的進程;

語言和開發環境的獨立性:組件隻需要定義好服務接口,內部實現可以采用任何語言。

面向組件的框架已經有很多瞭,如JavaBean、EJB、COM等。Android系統並沒有聲稱自己是面向組件的,但從其設計思想來看,Android一開始的設計考慮就是要采用一種“無邊界”的設計方式,要實現系統內資源高度的重用。

 

事實上,Android完全符合面向組件的特征。首先,Android提供瞭Activity、Service、BroadcastReceiver和ContentProvider四大組件。這四大組件之間的協作是通過Binder機制和來協作的,其中ServiceManager與ActivityManagerService是保證組件間協同工作的最重要的基礎,同時它們本身也是一種組件。ServiceManager是Binder的守護進程,用來管理各種服務,並向調用這些服務的客戶提供查詢遠程接口的功能。而ActivityManagerService負責所有Activity和Service的啟動,另外還負責系統中所有廣播的註冊和發佈以及把廣播發送給接收者。

有瞭這個機制,Android各個組件之間實現瞭低耦合,Activity與Activity、Activity與Service、Service與Service之間的都隻需知道對方的“名字”就可以訪問它。而且,它們之間的重用是系統級的,尤其是Service,任何部署在系統裡的Service可以為任何一個應用,任何一個進程,任何一個組件來提供服務。它也滿足高互操作性,任何開發者開發出來的組件,隻要公佈其接口就可以為其他開發者所用。Android對進程完全透明,取而代之的,在Android裡,一般用Task的概念來作為應用的邊界,一個Task可以是單個進程也可以是多個進程。Activity與Service的協作既可以在同一個進程又可以在不同進程完成。如,啟動Activity的startActivity函數,如果新Activity配置瞭android:process這個屬性,那麼,它就會運行在另一個進程中 ,否則運行在同一進程中。而啟動Service的方式有兩種,如下:

startService:運行在不同進程;

bindService:運行在統一進程。

啟動過程都是通過binder機制來通知ActivitManagerService來決定是否要新建一個進程,並啟動新的Activity或Service。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *