最近工作任務不忙,學習一下Android Framework方面的知識。
一、介紹,是什么
Android的Framework是直接應用之下的一層,叫做應用程序框架層。這一層是核心應用程序所使用的API框架,為應用層提供各種API,提供各種組件和服務來支持我們的Android開發,包括ActivityManager,WindowManager,ViewSystem等。下面貼一張學習Android時常見的Android系統架構圖:
二、有什么
Android Framework框架包含了3個主要部分:服務端、客戶端、Linux驅動。
首先介紹一下服務端都有哪些重要的東西:
- ActivityManagerService(Ams):負責管理所有應用程序中的Activity,它掌握所有Activity的情況,具有所有調度Activity生命周期的能力,簡單來說,ActivityManagerService是管理和掌控所有的Activity.
- WindowManagerService(Wms):控制窗口的顯示、隱藏以及窗口的層序,簡單來說,它就是管理窗口的,大多數和View有關系的都要和它打交道。
- KeyQ類:它是Wms的一個內部類,一旦創建就會啟動一個新線程,這個線程會不斷地接收和讀取用戶的UI操作消息,並把這些消息放到消息隊列QueueEvent中。
- 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 為所有應用程序分配窗口,並管理這些窗口。