標籤:activity 事件 系統架構 nta 較差 window style activiti 接收
最近工作任務不忙,學習一下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 為所有應用程式分配視窗,並管理這些視窗。
Android Framework 初探