SystemServer进程主要用于创建系统服务,我们熟知的AMS,WMS和PMS都是由他创建的。

Zygote处理SystemServer进程,SystemServer进程的创建是复制了Zygote进程的地址空间 ,所以需要删除Zygote的socket,

(1)在ZygoteInit.java中做了如下操作

调用本地方法Zygote.nativeZygoteInit();用来启动Binder线程池,这样SystemSrever进程就可以和其他进程进行通信了

(2)进入SystemServer的main方法

创建SystemServiceManager,其用于对系统的服务进行创建,启动和生命周期管理

在SystemServer的main方法中做了很多初始化的工作

<1>.加载了“libandroid_servers.so”动态库

<2>.初始化了SystemServiceManager,他会对系统服务进行创建,启动和生命周期管理

<3>.调用startBootstrapServices();方法启动引导服务

<4>.调用startCoreServices();方法启动核心服务

<5>.调用startOtherServices();方法启动其他服务

官方主要把系统服务分为了三种类型,分别是引导服务,核心服务和其他服务

引导服务主要包含:

Installer:系统安装APK时的一个服务类,启动完成Installer服务后,才能启动其他的服务系统
ActivityManagerService:负责四大组件的启动切换和调度;
PowerManagerService:计算系统中和Power相关的计算,然后决策系统应该如何反应
LightsService:管理和显示背光LED
DisplayManagerService:用来管理所有的显示设备
PackageManagerService:用来对APK进行安装解析,删除,卸载等操作
...
核心服务:
DropBoxManagerService:用于生成和管理系统运行时的一些日志文件;
BatteryService:管理电池相关的服务;
UsageStatsService:收集每个用户使用APP的频率和使用时长
WebViewUpdateService:WebView更新服务
其他服务:
CameraService:摄像头相关服务
WindowManagerService:窗口管理服务
InputManagerService:管理输入事件
AlarmManagerService:全局定时器管理服务
VrManagerService:VR模式管理服务
BluetoothService:蓝牙管理服务
NotificationManagerService:通知管理服务
DeviceStorageMonitorService:存储管理服务
LocationManagerService:定位管理服务:
AudioService:音频相关管理服务
...

启动Service先把Service存储在SystemService类型的ArrayList中进行注册,然后通过onStart方法进行启动;

然后也可以通过直接调用服务的main方法进行启动