初始Android Framework(框架)方面的知識(一)
阿新 • • 發佈:2018-12-21
介紹Android Framework(框架)是什麼?
Android的Framework是直接應用之下的一層,叫做應用程式框架層。這一層是核心應用程式所使用的API框架,為應用層提供各種API,提供各種元件和服務來支援我們的Android開發,包括ActivityManager,WindowManager,ViewSystem等。
如下比較常見的Android框架圖:
Android Framework(框架)有什麼?
Android Framework框架包含了3個主要部分:服務端、客戶端、Linux驅動。
首先介紹一下服務端都有哪些重要的東西:
- ActivityManagerService(Ams):負責管理所有應用程式中的Activity,它掌握所有Activity的情況,具有所有排程Activity生命週期的能力,簡單來說,ActivityManagerService是管理和掌控所有的Activity.
- 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的三大核心功能:1、View.java:View工作原理,實現包括繪製view、處理觸控、按鍵事件等。2、ActivityManagerService.java:Ams 管理所有應用程式的Activity等。3、WindowManagerService.java:Wms 為所有應用程式分配視窗,並管理這些視窗。