一、總體結(jié)構(gòu):
框架中包含了3個(gè)主要部分:1.服務(wù)端; 2.客戶端; 3.Linux驅(qū)動(dòng)。
二、服務(wù)端主要成員:
主要包括AMS、PMS、WMS等。通過(guò)Binder機(jī)制與客戶端進(jìn)行交互。
ActivityManagerService(AMS):管理所有應(yīng)用程序中的Activity,他掌握所有Activity的情況,所有具有調(diào)度Activity生命周期的能力,簡(jiǎn)而言之,它就是管理和掌控所有的Activity。ActivityThread會(huì)通過(guò)Binder與之交互,而AMS與Zygote之間進(jìn)行交互則是通過(guò)Socket通信。
WindowManagerService(Wms):控制窗口的顯示與隱藏以及窗口的層序,簡(jiǎn)而言之,就是它是管理窗口的,可以知道大多數(shù)和View有關(guān)系的都要跟他打交道。
PackageManagerService:它是Android系統(tǒng)中最常用的服務(wù)之一。它負(fù)責(zé)系統(tǒng)中Package的管理,應(yīng)用程序的安裝、卸載、信息查詢等。
KeyQ
類:它是Wms的一個(gè)內(nèi)部類,一旦創(chuàng)建就會(huì)啟動(dòng)一個(gè)新線程,這個(gè)線程會(huì)不斷的接收讀取用戶的UI操作消息,并把這些消息放到消息隊(duì)列QueueEvent中。InputDispatcherThread
類:該類也是一旦創(chuàng)建就會(huì)啟動(dòng)一個(gè)線程,這個(gè)線程會(huì)不斷的從上面的QueueEvent中取出用戶的消息,進(jìn)行一定的過(guò)濾,再講這些消息發(fā)送給當(dāng)前活動(dòng)的客戶端程序中。
三、客戶端主要成員:
ActivityThread
:主線程(UI線程),它的main()
函數(shù)就是Android 程序的入口。內(nèi)部類主要有ApplicationThread
(繼承自IBinder
);還有H
類(繼承自Handler
)。ApplicationThread
主要負(fù)責(zé)與AMS打交道(通過(guò)Binder
機(jī)制實(shí)現(xiàn)交互),通過(guò)調(diào)用H
來(lái)發(fā)送消息,并在H
消息處理函數(shù)中調(diào)用主線程的方法來(lái)實(shí)現(xiàn)真正的業(yè)務(wù)邏輯。注意:ActivityThread
不是線程!!!ViewRootImpl
:很重要的一個(gè)類,負(fù)責(zé)客戶端與WMS的交互:內(nèi)部有W類,W類繼承于Binder,所以他與ApplicationThread的角色是差不多的,只不過(guò)他對(duì)應(yīng)的是Wms,當(dāng)Wms想與客戶端進(jìn)行通信的時(shí)候,Wms就調(diào)用這個(gè)類。內(nèi)部又有ViewRootHandler類繼承于Handler,所以他能在W類接收到Wms的消息后,把這個(gè)消息傳送到UI線程中。同時(shí)界面繪制的發(fā)起點(diǎn)也是在這里面:performTraversals()。Activity
:四大組件之一,用得最多的組件。主要與用戶交互。PhoneWindow
:繼承自Window類,它里面會(huì)放一個(gè)DecorView,它提供了一組統(tǒng)一窗口操作的API.DecorView
類:這是我們所能看到的View的所有,它繼承自FrameLayout,我們寫(xiě)的布局view就是放在他這個(gè)里面。ApplicationThread
類:繼承于Binder,當(dāng)Ams想與客戶端通信時(shí)(即調(diào)用客戶端的方法),Ams調(diào)用的就是這個(gè)類。Instrumentation
類:負(fù)責(zé)直接與Ams對(duì)話,比如當(dāng)客戶端想與Ams進(jìn)行通信時(shí)(即調(diào)用Ams服務(wù)里的方法),都是他去實(shí)現(xiàn)單向調(diào)用Ams,即他相當(dāng)于于一個(gè)管家,所有想調(diào)Ams的操作都集中到他這兒,他負(fù)責(zé)單向調(diào)用Ams.ActivityManager
:@SystemService(Context.ACTIVITY_SERVICE)
屬于系統(tǒng)服務(wù)。ActivityManager
存在于用戶進(jìn)程中,由用戶進(jìn)程調(diào)用獲取Activity
管理的一些基本信息。如:getRunningAppProcesses()、getAppTasks()
。但是ActivityManager
類并不真正執(zhí)行這些操作,操作的真正執(zhí)行在system_process
進(jìn)程中的ActivityManagerService
,ActivityManagerService
作為一個(gè)服務(wù)在system_process
啟動(dòng)時(shí)被加載。ActivityManager
與AMS
分屬于不同的進(jìn)程。它們之間通過(guò)Binder
進(jìn)行交互。WindowManager
:@SystemService(Context.WINDOW_SERVICE)
屬于系統(tǒng)級(jí)服務(wù)。它是一個(gè)接口,繼承自ViewManager
接口。由此可見(jiàn),它的職責(zé)主要是對(duì)控件View
進(jìn)行增(addView(View view, ViewGroup.LayoutParams params)
)、刪(removeView(View view)
)、改(updateViewLayout(View view, ViewGroup.LayoutParams params)
)操作。它本身還提供一些我們?cè)L問(wèn)手機(jī)屏幕的方法。屏幕的透明度、亮度、背景。它的實(shí)現(xiàn)類是WindowManagerImpl
。對(duì)View
的操作邏輯由WindowManagerImpl、WindowManagerGlobal及ViewRootImpl
等共同完成。ContentProviders
:使得應(yīng)用程序可以訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù)), 或者共享自己的數(shù)據(jù)。進(jìn)程間通信的方式之一。View System
:可以用來(lái)構(gòu)建應(yīng)用程序, 它包括列表(Lists),網(wǎng)格(Grids),文本框(Text boxes),按鈕(Buttons), 甚至可嵌入的web瀏覽器。NotificationManager
:@SystemService(Context.NOTIFICATION_SERVICE)
,系統(tǒng)級(jí)服務(wù)。主要管理通知欄消息,提醒用戶有事發(fā)生。它使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。PackageManager
:檢索各種類型的已經(jīng)安裝在設(shè)備上的應(yīng)用信息。提供對(duì)系統(tǒng)的安裝包的訪問(wèn)。包括安裝、卸載應(yīng)用,查詢permission相關(guān)信息,查詢Application相關(guān)信息等。TelephonyManager
:@SystemService(Context.TELEPHONY_SERVICE)
系統(tǒng)級(jí)服務(wù)。主要提供了一系列用于訪問(wèn)與手機(jī)通訊相關(guān)的狀態(tài)和信息的方法,查詢電信網(wǎng)絡(luò)狀態(tài)信息,sim卡的信息等。ResourceManager
:提供非代碼資源的訪問(wèn),如本地字符串,圖形,和布局文件(Layout files )。LocationManager
:@SystemService(Context.LOCATION_SERVICE)
,系統(tǒng)級(jí)服務(wù)。提供設(shè)備的地理位置的獲取方式。XMPP
:可擴(kuò)展通訊和表示協(xié)議。前身為Jabber,提供即時(shí)通信服務(wù)。例如推送功能,Google Talk。