初始Android Framework(框架)方面的知識
介紹Android Framework(框架)是什麼?
Android的Framework是直接應用之下的一層,叫作應用程序框架層。這一層是核心應用程序所使用的API框架,爲應用層提供各類API,提供各類組件和服務來支持咱們的Android開發,包括ActivityManager,WindowManager,ViewSystem等。java
以下比較常見的Android框架圖:
框架
Android Framework(框架)有什麼?
Android Framework框架包含了3個主要部分:服務端、客戶端、Linux驅動。異步
首先介紹一下服務端都有哪些重要的東西:
- ActivityManagerService(Ams):負責管理全部應用程序中的Activity,它掌握全部Activity的狀況,具備全部調度Activity生命週期的能力,簡單來講,ActivityManagerService是管理和掌控全部的Activity.(關於ActivityManagerService詳情解釋,請參考)
- WindowManagerService(Wms):控制窗口的顯示、隱藏以及窗口的層序,簡單來講,它就是管理窗口的,大多數和View有關係的都要和它打交道。
- KeyQ類:它是Wms的一個內部類,一旦建立就會啓動一個新線程,這個線程會不斷地接收和讀取用戶的UI操做消息,並把這些消息放到消息隊列QueueEvent中。(關於WindowManagerService詳情解釋,請參考)
- InputDispatcherThread類:該類也是一旦建立就會啓動一個新線程,這個線程會不斷地從上面的QueueEvent中取出用戶的消息進行必定的過濾,再將這些消息發送給當前活動的客戶端程序中。
下面介紹一下客戶端比較重要的東西:
- ActivityThread類:主線程類,即UI線程類,咱們的程序入口就是從ActivityThread的main()函數入口的。它根據Ams的要求(經過IApplicationThread接口,Ams爲Client,ActivityThread.ApplicationThread爲Server)負責調度和執行activities、broadcasts和其餘操做。
- ViewRoot類:很重要的一個類,負責客戶端與Wms的交互:內部類有W類,W類繼承與Binder,因此他與ApplicationThread的角色差很少,只不過它對應的是Wms,當Wms想與客戶端進行通訊的時候,Wms就調用這個類。內部又有ViewRootHandler類繼承於Handler,因此他能在W類接收到Wms的消息後把這個消息傳送到UI線程中。同時界面繪製的發起點也是在這裏面:performTraversals();
- W類:ViewRoot的幫手,繼承與Binder,是ViewRoot內部類。主要幫助ViewRoot實現把Wms的IPC(進程間通訊)調用轉換爲本地的一個異步調用。
- Activity類:這個類咱們比較熟悉,APK運行的最小單位。
- PhoneWindow類:繼承自Window類,它裏面會放一個DecorView,它提供了一組統一窗口操做的API。
- Window類:提供一些通用的窗口操做API.
- DecorView類:這是咱們所能看到的View的全部,它繼承自FrameLayout,咱們寫的佈局view就是放在它這個裏面。
- ApplicationThread類:繼承魚Binder,當Ams想與客戶端通訊時(即調用客戶端的方法時),Ams調用的就是這個類。
- Instrumentation類:負責直接與Ams對話,好比當客戶端想與Ams進行通訊時(即調用Ams服務裏的方法),都是它去實現單項調用Ams,全部想調用Ams的操做都集中到它這裏,它負責單向調用Ams。
- WindowManager:客戶端若是想建立一個窗口得先告訴WindowManager一聲,而後它再和WindowManagerService交流一下看看能不能建立,客戶端不能直接和WMS交互。
Linux驅動
Linux驅動和Framework相關的主要是兩個部分:畫家SurfaceFlingger和快遞員Binder。每個窗口都對應一個畫Surface,SF主要是把各個Surface顯示到同一屏幕上。Binder是提供跨進程的消息傳遞。函數
Manager機制
服務端有不少各類各樣的系統服務,當客戶端每次想要調用這些服務事(IPC)若是每次都是想要哪個服務就直接去調用哪個服務的話,會顯得比較亂並且拓展性較差,因此Android採用了這種Manager機制,即設置一個相似經理的東西,也就是Manager,它自身也是一個服務,而且它管理着全部其餘的服務,也就是說,咱們須要哪一個服務都要先通過它,它負責爲咱們去調用這個服務,因此這樣就只給咱們暴露的一個經理這個服務,其餘的服務被他屏蔽了,這和java的封裝很像。佈局
最後總結一下Android Framework的三大核心功能:一、View.java:View工做原理,實現包括繪製view、處理觸摸、按鍵事件等。二、ActivityManagerService.java:Ams 管理全部應用程序的Activity等。三、WindowManagerService.java:Wms 爲全部應用程序分配窗口,並管理這些窗口。spa