Android源碼のFramework框架層

目錄:
1、概識
2、ActivityManager
3、WindowManager
4、幾個SystemServer出現過的類

進擊的小仙

1. 概識Framework

應用程序框架層

ApplicationFramework 即應用程序框架層,這個框架層里包含了很多Manager,這些Manager里對應著很多<a>系統服務</a>,如ActivityManager對應ActivityManagerService,PackageManager對應PackageManagerServiceWindowManager對應著WindowManagerService等等。這些系統服務都是在SystemServer進程的run()方法中啟動的。
從Linux內核到應用程序,進程的啟動流程是:

Linux的init進程 → Zygote進程 → SystemServer進程 → App的進程

1.1. 系統服務

系統服務 可以分為三種類型:

  • BootStrapServices 引導服務類型
  • CoreServices 核心服務類型
  • OtherServices 其他服務類型

啟動 系統服務:
系統服務由SystemServer.java類啟動,在該類的main主函數中會調用run()方法,run()方法首先實例化SystemServiceManager對象,再利用LocalService.addService()方法將這個管理器對象添加到LocalService中。

 // Create the system service manager.
mSystemServiceManager = new SystemServiceManager(mSystemContext);
LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);

然后依次調用以下三個函數來啟動各系統服務:

startBootstrapServices(); // 引導類服務
startCoreServices(); // 核心類服務
startOtherServices(); // 其他類服務

具體是通過mSystemServiceManagerstartService()方法來啟動各服務,如AMS服務的啟動:

mActivityManagerService = mSystemServiceManager.startService(
                ActivityManagerService.Lifecycle.class).getService();

系統服務的啟動順序
InstallerActivityManagerService
PowerManagerService
ActivityManagerService
DisplayManagerService
PackageManagerService
UserManagerService
SensorService
BatteryService
UsageStatsService
WebViewUpdateService
OtherServices

1.2. BootStrapServices 引導服務

  • ActivityManagerService【管理整個框架中任務、進程管理, Intent解析等的核心實現,管理四大組建的生命周期】
  • PowerManagerService【電源管理服務】
  • LightsService【光感服務】
  • DisplayManagerService【展示管理服務】
  • PackageManagerService【包管理服務】
  • UserManagerService【用戶管理服務】
  • SensorService【傳感器服務】

1.3. CoreServices 核心服務

  • BatteryService【電池管理服務】
  • UsageStatsService【用戶使用狀態服務】
  • WebViewUpdateService【WebView更新服務】

1.4. OtherServices其他服務

  • SchedulingPolicyService【調度策略服務】
  • TelecomLoaderService【電信加載服務】
  • TelephonyRegistry【提供電話注冊、管理服務,可以獲取電話的鏈接狀態、信號強度等等服務】
  • CameraService【相機服務】
  • AccountManagerService【賬戶管理服務,需先于ContentService啟動】
  • ContentService【內容服務,主要是數據庫等提供解決方法的服務】
  • VibratorService【震動服務】
  • ConsumerIrService【遠程控制服務,通過紅外等控制周圍的設備(例如電視等)】
  • AlarmManagerService【鬧鐘、定時器服務】
  • InputManagerService【處理分發事件,從WindowManagerService獨立出來的】
  • WindowManagerService【窗口管理服務】
  • BluetoothService【藍牙服務】
  • InputMethodManagerService【輸入法服務】
  • AccessibilityManagerService【輔助管理程序截獲所有的用戶輸入,并根據這些輸入給用戶一些額外的反饋,起到輔助的效果,View的點擊、焦點等事件分發管理服務】
  • MountService【磁盤加載服務程序,NotificationManagerService依賴這個服務】
  • UiModeManagerService【夜間模式和行車模式管理服務】
  • LockSettingsService【鎖屏設置服務】
  • PersistentDataBlockService【永久數據存儲分區服務】
  • DeviceIdleController【設備idle狀態控制器】
  • DevicePolicyManagerService【設備策略管理服務】
  • StatusBarManagerService【狀態欄管理服務】
  • ClipboardService【剪貼板服務】
  • NetworkManagementService【網絡管理服務】
  • TextServicesManagerService【文本服務】
  • NetworkScoreService【android.net.NetworkScoreManager的備份服務】
  • NetworkStatsService【網絡狀態服務】
  • NetworkPolicyManagerService【網絡策略管理服務】
  • WIFI_P2P_SERVICE【】
  • WIFI_SERVICE【】
  • WifiScanningService【】
  • RttService【】
  • ETHERNET_SERVICE【】
  • ConnectivityService【連接服務】
  • NsdService【網絡服務搜索】
  • UPDATE_LOCK_SERVICE【】
  • NotificationManagerService【廣播管理服務】
  • DeviceStorageMonitorService【設備存儲模擬器服務】
  • LocationManagerService【GPS、定位等位置服務】
  • CountryDetectorService【檢測所在國家服務】
  • SearchManagerService【搜素管理服務 】
  • DropBoxManagerService【系統運行時日志的存儲與管理服務】
  • WallpaperManagerService【壁紙管理服務】
  • AudioService【音頻服務】
  • DockObserver【管理座子的插入與拔出】
  • MidiManagerService【樂器數字接口管理服務】
  • UsbService【USB服務】
  • SerialService【串口設備服務】
  • TwilightService【夜間模式服務】
  • JobSchedulerService【工作調度服務】
    <a>....有點多,以后再貼~~~</a>

2. ActivityManager

ActivityManager管理和維護系統中所有正在運行著的Activity的相關信息,并提供了相關的訪問接口。ActivityManager類的類注釋(與系統中所有運行著的Activity進行交互):

Interact with the overall activities running in the system.

Paste_Image.png

ActivityManager作為客戶端,他的所有操作最終都由AMS(ActivityManagerService)來完成。

Paste_Image.png

2.1. AMS

AMS(ActivityManagerService)是管理系統組件的核心服務,負責四大組件的啟動、切換、調度,進程的管理和調度等等。他的初始化由SystemServer在執行run()方法的時候完成,之后便獨立運行在進程中。
所在目錄:
/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
主要功能:

  • 統一調度各個Activity的運行:ActivityRecord
  • 進程管理:ProcessRecord
  • 內存管理:TaskRecord

2.2. 代理模式

代理模式是設計模式中的一種,為了解耦,ActivityManager和AMS二者通過代理模式實現交互。ActivityManagerProxyActivityManager的代理,也稱為本地代理;ActivityManagerNativeActivityManagerService的代理,也稱為遠端代理。

2.3. Binder粘合劑

Binder作為粘合劑,主要是連接本地代理和遠端代理。由遠端代理ActivityManagerNative繼承,在其中粘合本地代理。


3. WindowManager

外部訪問Window的入口,可實現添加、刪除、更新View。他的所有操作最后交由WMS(WindowManagerService)完成。與ActivityManager類不同,WindowManager是一個接口,接口注釋為(應用與窗口管理器交互的接口):

The interface that apps use to talk to the window manager.

這個接口中的內容比較少,看看他的結構:

Paste_Image.png

WMS為所有窗口分配Surface,掌管Surface的顯示順序(Z-order)以及位置尺寸,控制窗口動畫,并且還是輸入系統的一重要的中轉站。WMS的初始化也是由SystemServer在執行run()方法的時候完成的,初始化后運行在SystemServer進程中。初始化分以下三步:

  • 創建WMS實例:
wm = WindowManagerService.main(context, inputManager,
                    mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL,
                    !mFirstBoot, mOnlyCore);
  • 添加到ServiceManager中:ServiceManager.addService(Context.WINDOW_SERVICE,wm);
  • 初始化顯示信息:wm.displayReady();
  • 處理SystemReady通知:wm.systemReady();

4. 幾個SystemServer出現過的類

4.1. SystemConfig

SystemConfig負責解析系統Permissions和Feature信息。
類注釋中說是加載系統全局配置信息:

Loads global system configuration info.

Paste_Image.png

4.2. EntropyMixer

生成隨機數的服務,前生是EntropyService

4.3. Watchdog

Watchdog用于監測Service是否處于正常的工作中。他是一個線程,運行在SystemServer進程中。

This class calls its monitor every minute. Killing this process if they don't return

5. 參考資料

深入理解 PackageManagerService
Android 系統服務一覽表
SystemServer進程源碼分析之一
Android Framework之PMS篇【PackageManagerService】

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容