目錄:
1、概識
2、ActivityManager
3、WindowManager
4、幾個SystemServer出現過的類
1. 概識Framework
ApplicationFramework 即應用程序框架層,這個框架層里包含了很多Manager,這些Manager里對應著很多<a>系統服務</a>,如
ActivityManager
對應ActivityManagerService
,PackageManager
對應PackageManagerService
,WindowManager
對應著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(); // 其他類服務
具體是通過mSystemServiceManager
的startService()
方法來啟動各服務,如AMS
服務的啟動:
mActivityManagerService = mSystemServiceManager.startService(
ActivityManagerService.Lifecycle.class).getService();
系統服務的啟動順序:
Installer
→ ActivityManagerService
→ 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.
ActivityManager作為客戶端,他的所有操作最終都由AMS(ActivityManagerService)來完成。
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二者通過代理模式實現交互。ActivityManagerProxy
為ActivityManager
的代理,也稱為本地代理;ActivityManagerNative
為ActivityManagerService
的代理,也稱為遠端代理。
2.3. Binder粘合劑
Binder作為粘合劑,主要是連接本地代理和遠端代理。由遠端代理ActivityManagerNative繼承,在其中粘合本地代理。
3. WindowManager
外部訪問Window的入口,可實現添加、刪除、更新View。他的所有操作最后交由WMS(WindowManagerService)完成。與ActivityManager類不同,WindowManager是一個接口,接口注釋為(應用與窗口管理器交互的接口):
The interface that apps use to talk to the window manager.
這個接口中的內容比較少,看看他的結構:
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.
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】