1、無框架結構,直接調用底層API
以往是底層平台(操作系統)提供API讓上層APP去調用。
這樣的軟件控制權在APP上。舉例 APP調用了平台的函數 Fun1,那么平台要對Fun1進行維護不敢隨意改變這個函數,系統的更新成本大,上層APP越多,維護成本越大,導致到平台被局限。
2、單層框架結構
為了讓系統開發者取得控制權,后來架構師們建造了一種框架結構。
APP開發者在這個框架的結構基礎上開發自己的APP。
單層結構的模型是下圖所示:
除了一部分平台的API仍然是由APP所調用外,更多是由框架反向調用APP來驅動整個APP的運行,框架定義出接口與基類,APP基礎基類寫出具象類,框架通過調用接口來實現對APP的反向調用,這也是IoC原理的核心。
3、復合型框架
為了滿足更多元化的軟件業務需求的開發,從單層框架基礎上延伸除了復合型框架,
大框架和平台是系統開發者來開發,小框架可以系統開發者或者第三方廠商開發,比如游戲引擎,小框架是可以根據不同業務來選型,APP在這種大小框架結合的情境下開發大大的降低了開發難度,加快了開發速度。
4、雙層框架
為了進一步完善框架,即平衡APP的開發速度也要提高APP的運行速度。
那么結合Java和C++兩種語言的特性來構建這個框架,Java是應用層級與APP開發者最親近,它是負責簡化APP開發來設計的,從語言特性來說Java是更簡單,容易被APP開發者所使用,C++是更運行性能高效,是負責性能擔當,它與平台更親近。
兩者結合,使得APP的開發速度快,且運行速度快。
5、Android的框架
Android的框架就是采用上面的雙層復合型框架的方式來構建的。其實現在很多框架都采用這種方式來構建。
舉例個例子來了解下Android的底層框架原理。
1、Android的四大組件,Activity、service、BroadcastReceiver、ContentProvider。
他們的作為基類是由框架所定義的,APP的開發者想要用組件的功能只能是寫子類來繼承使用。如定義 myActivity,由框架所調用 new myActivity 創建出對象並被調用 onCreate方法來創建窗體頁面。
模擬一下框架的實現:
Activity object = new myActivity();
object.onCreate();
哪有人會疑惑,框架的代碼是在這個APP開發之前就有了,那么框架代碼怎么會有myActivity這個類,myActivity這個類明明是APP開發者來寫的,這個名稱系統開發者不可能提前知道。
這就歸功於 AndroidManifest.xml文檔,Mani文檔里面要求開發者把自己定義的Activity的名稱寫上。
在APP執行階段(run-time)Android框架就會讀取開發者所寫的Mani的內容,從而得知到開發者所寫子類的名稱,就能創建出這些應用子類的對象。
如下圖所示:
2、組件與組件之間的溝通:
從上面大家知道組件的子類雖然由APP開發者所寫,但卻由框架所創建,
同樣,組件中的通信也是由框架所負責,框架是組件間溝通的橋梁。而溝通的介質是intent,中文翻譯過來是意圖,實際是跟信封一個道理。
你給遠在他方的女朋友寄一封信,你只要按照郵局規定的格式來寫這封信,比如寫好寄信人信息,收信人信息,和信的內容,最后投遞到郵局,最終通過郵局來把這一封信寄到你女朋友手里。
同樣APP開發者只需要按照格式寫好Intent交給框架,而至於框架怎么把Intent交給對方你就不需要關注。
如下圖所示: