1,請看某個著名的it公司一則招聘資訊的其中一條要求:“熟悉android系統架構及相關技術,1年以上實際android平台開發經驗;”,裡面非常明確的說道要求熟練android系統架構,這從某種程度上說明了對android體系架構的理解的重要性,下面我們看看android體繫結構圖,該圖源自android的文檔:
很明顯,包含四個主要的層次:
linuxkernel:負責硬體的驅動程式、網路、電源、系統安全以及記憶體管理等功能。
libraries和androidruntime:libraries:即c/c++函數庫部分,大多數都是開放原始碼的函數庫,例如webkit,該函數庫負責android網頁瀏覽器的運行,例如標準的c函數庫libc、openssl、sqlite等,當然也包括支援遊戲開發2dsgl和3dopengles,在多媒體方面有mediaframework架構來支援各種影音和圖形檔案的播放與顯示,例如mpeg4、h.264、mp3、aac、amr、jpg和png等眾多的多媒體檔案格式。android的runtime負責解釋和執行產生的dalvik格式的位元組碼。
applicationframework(應用軟體架構),java應用程式開發人員主要是使用該層封裝好的api進行快速開發。
applications:該層是java的應用程式層,android內建的googlemaps、e-mail、即時通訊工具、瀏覽器、mp3播放器等處於該層,java開發人員開發的程式也處於該層,而且和內建的應用程式具有平等的位置,可以調用內建的應用程式,也可以替換內建的應用程式。
上面的四個層次,下層為上層服務,上層需要下層的支援,調用下層的服務,這種嚴格分層的方式帶來的極大的穩定性、靈活性和可擴充性,使得不同層的開發人員可以按照規範專心特定層的開發。
android應用程式使用架構的api並在架構下運行,這就帶來了程式開發的高度一致性,另一方面也告訴我們,要想寫出優質高效的程式就必須對整個applicationframework進行非常深入的理解。精通applicationframework,你就可以真正的理解android的設計和運行機制,也就更能夠駕馭整個應用程式層的開發。
2,android的官方建議應用程式的開發採用mvc模式。何謂mvc?先看看
mvc是model,view,controller的縮寫,從可以看出mvc包含三個部分:
l模型(model)對象:是應用程式的主體部分,所有的商務邏輯都應該寫在該層。
l視圖(view)對象:是應用程式中負責產生使用者介面的部分。也是在整個mvc架構中使用者唯一可以看到的一層,接收使用者的輸入,顯示處理結果。
l控制器(control)對象:是根據使用者的輸入,控制使用者介面資料顯示及更新model對象狀態的部分,控制器更重要的一種導航功能,想用使用者出發的相關事件,交給m哦得了處理。
android鼓勵弱耦合和組件的重用,在android中mvc的具體體現如下:
1)視圖層(view):一般採用xml檔案進行介面的描述,使用的時候可以非常方便的引入,當然,如何你對android瞭解的比較的多了話,就一定可以想到在android中也可以使用javascript+html等的方式作為view層,當然這裡需要進行java和javascript之間的通訊,幸運的是,android提供了它們之間非常方便的通訊實現。
2)控制層(controller):android的控制層的重任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model商務邏輯層處理,這樣做的另外一個原因是android中的acitivity的回應時間是5s,如果耗時的操作放在這裡,程式就很容易被回收掉。
3)模型層(model):對資料庫的操作、對網路等的操作都應該在model裡面處理,當然對業務計算等操作也是必須放在的該層的。
3,設計模式和ioc(控制反轉)
毫無疑問,android的之所以能夠成為一個開放的氣象萬千的系統,與設計模式的精妙應用是分不開的,只要你稍微用心觀察,就會發現在android中到處都是a設計模式或者設計模式的聯合運用,一下的設計模式是您想遊刃有餘的駕馭android必須掌握的:
ltemplatemethod模式
lfactorymethod模式
lobserver模式
labstractfactory模式
ladapter模式
lcomposite模式
lstrategy模式
lstate模式
lproxy模式
lbridge模式
literator模式
lmediator模式
lfa?ade模式
android架構魅力的源泉在於ioc,在開發android的過程中你會時刻感受到ioc帶來的巨大方便,就拿activity來說,下面的函數是架構調用自動調用的:
protectedvoidoncreate(bundlesavedinstancestate);
不是程式編寫者主動去調用,反而是使用者寫的代碼被架構調用,這也就反轉了!當然ioc本身的內涵遠遠不止這些,但是從這個例子中也可以窺視出ioc帶來的巨大好處。此類的例子在android隨處可見,例如說資料庫的管理類,例如說android中sax的handler的調用等。有時候,您甚至需要自己編寫簡單的ioc實現,上面展示的多線程現在就是一個說明。