Framework概述
Framework框架
框架包含三部分:
- 服務(wù)端
- 客戶端
- Linux驅(qū)動
服務(wù)端
服務(wù)端只要包含了兩個重要的類
- WindowManagerService(WmS)
- 負(fù)責(zé)各窗口的疊放次序,隱藏或者顯示窗口
- ActivityManagerService(AmS)
- 負(fù)責(zé)管理Activity
除了這兩個重要的類之外,還有兩個類很重要
- KeyQ
- WmS的內(nèi)部類,繼承于KeyInputQueue類
- 創(chuàng)建之后,立刻啟動一個線程,不斷的讀取用戶UI操作消息,并將這些消息放到消息隊(duì)列(QueueEvent的實(shí)例)中
- InputDispatcherThread
- 對象創(chuàng)建之后,不停的從消息隊(duì)列(QueueEvent的實(shí)例)中取出消息,經(jīng)過自己的過濾之后,派發(fā)到當(dāng)前活動的客戶端程序中
客戶端
主要包含以下類:
- ActivityThread類:應(yīng)用程序的主線程類,所有的App都擁有一個這樣的類。該類的程序入口是 static main() 函數(shù)。ActivityThread所在的線程為UI線程。
- Activity類:為APK運(yùn)行的最小單元,由用戶的選擇之后,ActivityThread來啟動和切換。
- PhoneWindow類:
- 繼承于Window類
- 包含了一個DecorView
- 提供了一組通用窗口操作API
- Window類
- 提供了一組通用窗口操作API
- Window是一個抽象類
- 注意:WmS管理的是View或ViewGroup,并不是直接管理Window類
- DecorView類
- 繼承于FrameLayout
- 裝飾類(decoretion),對FrameLayout進(jìn)行了裝飾,添加了TitleBar,按鍵響應(yīng)等
- ViewRoot類
- 繼承自Handler類,作用是,當(dāng)WmS發(fā)生IPC調(diào)用時,將調(diào)用轉(zhuǎn)成一個本地的異步調(diào)用。
- WmS管理客戶端窗口時,需要通知客戶端進(jìn)行某種操作。這些操作是通過IPC來完成的。
- W類
- 繼承于IBinder,是ViewRoot的內(nèi)部類。WmS發(fā)生IPC調(diào)用時,就是調(diào)用本Binder類。
- 本Binder類將收到的IPC調(diào)用,包裝成Handle的消息,發(fā)送出去,以便進(jìn)行異步處理。
- WindowManager類
- 客戶端需要添加一個窗口,但是窗口是由WmS來管理的??蛻舳瞬荒苤苯雍蚖mS交互,由WindowManger來負(fù)責(zé)和WmS的交互。
Linux驅(qū)動
Linux驅(qū)動和FrameWork相關(guān)的有兩部分
- SurfaceFlinger
- 每一個窗口都有一個surface
- SurfaceFlinger將這些surface顯示到一個屏幕上
- Binder
- 提供進(jìn)程間的消息傳遞