Android四層架構(gòu)經(jīng)典圖
開局一張圖,內(nèi)容全靠編

自上而下分為四層:
應(yīng)用程序?qū)樱╝pplication):
最熟悉最常用的業(yè)務(wù)層。應(yīng)用程序框架層(framework):
應(yīng)用程序使用的系統(tǒng)API框架,提供各種組件和服務(wù),包括ActivityManager,WindowManager,ViewSystem等。系統(tǒng)運(yùn)行層(libraries和runtime):
1、libraries:Android 包含一些C/C++庫,這些庫能被Android系統(tǒng)中不同的組件使用;
2、runtime:Android的核心庫ART,是Android的運(yùn)行環(huán)境(虛擬機(jī)),4.4開始取代Dalvik,5.0后徹底取代,在安裝APK或者動(dòng)態(tài)加載DEX文件時(shí)將其中的Java方法編譯為本地代碼,運(yùn)行程序的時(shí)候不需要再做JIT編譯。linux內(nèi)核層(linux kernel):
Android 的核心系統(tǒng)服務(wù)依賴于 Linux 2.6 內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理, 網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。 Linux 內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層。
下面我們主要梳理framework的內(nèi)容:
需要學(xué)習(xí)的內(nèi)容有:進(jìn)程間通信,多線程,jni,linux相關(guān)知識,binder

三大核心功能:
-
view.java:
View工作原理,實(shí)現(xiàn)包括繪制view、處理觸摸、按鍵事件等。
-
ActivityManagerService.java:
Ams 管理所有應(yīng)用程序的Activity 等,對應(yīng)用進(jìn)程和進(jìn)程中四大組件進(jìn)行管理(Activity的調(diào)度管理、Service的管理、Broadcast的分發(fā)、以及ContentProvider管理) 。
-
WindowManagerService.java:
Wms 為所有應(yīng)用程序分配窗口,并進(jìn)行管理;動(dòng)畫處理 ;Input分發(fā)、處理;Display管理(多屏顯示)。
其他知識點(diǎn)簡述:
-
Binder:
每個(gè)Binder都會對應(yīng)一個(gè)線程,所以一個(gè)含Activity的程序最少也有3個(gè)線程,分別是:
1.ActivityThread(UI主線程 ):
程序是從它的main()函數(shù)入口,內(nèi)部有ApplicationThread類(繼承IBinder)負(fù)責(zé)與AMS跨進(jìn)程通信,又有H類(繼承自Handler類),負(fù)責(zé)接收ApplicationThread發(fā)來的消息,實(shí)現(xiàn)把消息傳到主線程2.ApplicationThread:
繼承于Binder,當(dāng)Ams與客戶端通信時(shí)(即調(diào)用客戶端的方法),Ams調(diào)用的就是這個(gè)類3.ViewRoot.W:
負(fù)責(zé)客戶端與WMS的交互:內(nèi)部有W類,W類繼承于Binder,所以他與ApplicationThread的角色是差不多的,只不過他對應(yīng)的是Wms,當(dāng)Wms想與客戶端進(jìn)行通信的時(shí)候,Wms就調(diào)用這個(gè)類。內(nèi)部又有ViewRootHandler類繼承于Handler,所以他能在W類接收到Wms的消息后,把這個(gè)消息傳送到UI線程中。同時(shí)界面繪制的發(fā)起點(diǎn)也是在這里面:performTraversals()
-
JNI:
java本地服務(wù),和系統(tǒng)運(yùn)行層的c++進(jìn)行交互