背景
最近在调研Android P中 AMS,WMS,通讯逻辑,记录整理一下。
SystemServer 文件目录
AOSP\frameworks\base\services\java\com\android\server\SystemServer.java AOSP\frameworks\base\services\core\java\com\android\server\SystemServiceManager.java 主要是这个两个文件 SystemServer.java 负责创建SystemServiceManager对象,为zygote提供入库,获取和设置系统属性 SystemServiceManager 负责管理一下服务 
try {
traceBeginAndSlog("StartServices");
startBootstrapServices();
startCoreServices();
startOtherServices();
SystemServerInitThreadPool.shutdown();
} catch (Throwable ex) {
Slog.e("System", "******************************************");
Slog.e("System", "************ Failure starting system services", ex);
throw ex;
} finally {
traceEnd();
}
这个服务也是比较简单注释很全面,从代码启动顺序列一下服务类名:
一、startBootstrapServices
服务列表:
- Installer
- DeviceIdentifiersPolicyService
- ActivityManagerService
- PowerManagerService
- RecoverySystemService
- LightsService
- SidekickService[可选]
- DisplayManagerService
- mSystemServiceManager.startBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY);
//PHASE_WAIT_FOR_DEFAULT_DISPLAY = 100 - PackageManagerService
- OtaDexoptService
- UserManagerService
- OverlayManagerService
- SensorService

二、startCoreServices
服务列表:
- BatteryService
- UsageStatsService
- WebViewUpdateService[可选]
- BinderCallsStatsService
三、startOtherServices
服务列表:
- KeyAttestationApplicationIdProviderService
- KeyChainSystemService
- SchedulingPolicyService
- TelecomLoaderService
- TelephonyRegistry
- AccountManagerService
- ContentService
- DropBoxManagerService
- VibratorService [可选]
- ConsumerIrService [可选]
- AlarmManagerService
- Watchdog
- InputManagerService
- WindowManagerService
- START_HIDL_SERVICES
- VrManagerService [可选]
- BluetoothService [可选]
- IpConnectivityMetrics
- NetworkWatchlistService
- PinnerService
// Bring up services needed for UI. - InputMethodManagerService
- AccessibilityManagerService
- StorageManagerService
- StorageStatsService
- UiModeManagerService
- LockSettingsService
在往下就是FactoryTest off、FACTORY_TEST_HIGH_LEVEL需要启动的服务 不列了,有需要的自行查询 下面是重点
traceBeginAndSlog("StartInputManagerService");
inputManager = new InputManagerService(context);
traceEnd();
traceBeginAndSlog("StartWindowManagerService");
ConcurrentUtils.waitForFutureNoInterrupt(mSensorServiceStart, START_SENSOR_SERVICE);
mSensorServiceStart = null;
wm = WindowManagerService.main(context, inputManager,
mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL,
!mFirstBoot, mOnlyCore, new PhoneWindowManager());
ServiceManager.addService(Context.WINDOW_SERVICE, wm, false,
DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PROTO);
ServiceManager.addService(Context.INPUT_SERVICE, inputManager,
false, DUMP_FLAG_PRIORITY_CRITICAL);
traceEnd();
traceBeginAndSlog("SetWindowManagerService");
mActivityManagerService.setWindowManager(wm);
traceEnd();
traceBeginAndSlog("WindowManagerServiceOnInitReady");
wm.onInitReady();
traceEnd();
|