SystemServer 概述
SystemServer 是 Android 系统中一个非常重要的进程,它负责 启动和管理各种系统服务。
主要经过以下几个阶段:
- Zygote 启动:由
Zygote进程 fork 出SystemServer进程 - 初始化:执行
SystemServer.main()方法 - 服务启动:按顺序启动各种系统服务
- 系统就绪:等待所有服务启动完成后,系统进入就绪状态
启动从Main方法开始
/**
* The main entry point from zygote.
*/
public static void main(String[] args) {
new SystemServer().run();
}
很简单,创建new一个自己的对象,并执行run方法,看一下run方法
private void run() {
...
if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {
Slog.w(TAG, "System clock is before 1970; setting to 1970.");
SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);
}
VMRuntime.getRuntime().clearGrowthLimit();
// The system server has to run all of the time, so it needs to be
// as efficient as possible with its memory usage.
VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);
android.os.Process.setThreadPriority(
android.os.Process.THREAD_PRIORITY_FOREGROUND);
android.os.Process.setCanSelfBackground(false);
Looper.prepareMainLooper();
// Create the system service manager.
mSystemServiceManager = new SystemServiceManager(mSystemContext);
mSystemServiceManager.setStartInfo(mRuntimeRestart,
mRuntimeStartElapsedTime, mRuntimeStartUptime);
LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
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();
}
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
run方法里面主要进行设置手机时间,设置虚拟机内存大小,创建消息循环Looper,创建SystemServiceManage等。最主要的就是启动了各类服务,例如:
- startBootstrapServices() //启动引导服务
- startCoreServices() //启动核心服务
- startOtherServices() //启动其他服务
startBootstrapServices 启动引导服务
//com.android.server.SystemServer
private void startBootstrapServices() {
Installer installer = mSystemServiceManager.startService(Installer.class);
mSystemServiceManager.startService(DeviceIdentifiersPolicyService.class);
//ActivityManagerService - AMS
ActivityTaskManagerService atm = mSystemServiceManager.startService(ActivityTaskManagerService.Lifecycle.class).getService();
mActivityManagerService = ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);
mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
mActivityManagerService.setInstaller(installer);
mWindowManagerGlobalLock = atm.getGlobalLock();
t.traceEnd();
....
//PackageManagerService - PMS
Watchdog.getInstance().pauseWatchingCurrentThread("packagemanagermain");
mPackageManagerService = PackageManagerService.main(mSystemContext, installer,domainVerificationService, mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF,mOnlyCore);
....
//WindowManagerService - WMS
mSystemServiceManager.startBootPhase(t, SystemService.PHASE_WAIT_FOR_SENSOR_SERVICE);
wm = WindowManagerService.main(context, inputManager, !mFirstBoot, mOnlyCore,new PhoneWindowManager(), mActivityManagerService.mActivityTaskManager);
ServiceManager.addService(Context.WINDOW_SERVICE, wm, /* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PROTO);
ServiceManager.addService(Context.INPUT_SERVICE, inputManager,* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL);
t.traceEnd();
....
//PowerManagerService - PWMS
mPowerManagerService = mSystemServiceManager.startService(PowerManagerService.class);
t.traceEnd();
....
//NetworkManagementService - NMS
try {
networkManagement = NetworkManagementService.create(context);
ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement);
} catch (Throwable e) {
reportWtf("starting NetworkManagement Service", e);
}
t.traceEnd();
....
}
-
ActivityManagerService (AMS服务)
- 应用程序生命周期管理
- Activity 启动和调度
- 进程管理
- PackageManagerService (PMS)
- 应用包管理
- 权限管理
- 组件解析
- WindowManagerService (WMS)
- 窗口管理
- UI 布局管理
- 输入事件分发
- PowerManagerService (PWMS)
- 电源管理
- 唤醒锁管理
- 休眠唤醒控制
- NetworkManagementService (NMS)
- 网络管理
- 流量控制
- 网络策略
startCoreServices 启动核心服务
private void startCoreServices() {
...
mSystemServiceManager.startService(BatteryService.class);
...
}
- BatteryService:电池管理服务
- 监控电池状态和电量
- 管理电池相关事件
- 提供电池信息给其他组件
startOtherServices 启动其他服务
private void startOtherServices() {
final Context context = mSystemContext;
VibratorService vibrator = null;
DynamicAndroidService dynamicAndroid = null;
IStorageManager storageManager = null;
NetworkManagementService networkManagement = null;
IpSecService ipSecService = null;
NetworkStatsService networkStats = null;
NetworkPolicyManagerService networkPolicy = null;
ConnectivityService connectivity = null;
NsdService serviceDiscovery= null;
WindowManagerService wm = null;
SerialService serial = null;
NetworkTimeUpdateService networkTimeUpdater = null;
InputManagerService inputManager = null;
TelephonyRegistry telephonyRegistry = null;
ConsumerIrService consumerIr = null;
MmsServiceBroker mmsService = null;
HardwarePropertiesManagerService hardwarePropertiesService = null;
....
}
- VibratorService:震动服务
- DynamicAndroidService:动态Android服务
- NetworkManagementService:网络管理服务
- NetworkStatsService:网络统计服务
- ConnectivityService:连接性服务
- WindowManagerService:窗口管理服务
- InputManagerService:输入管理服务
- TelephonyRegistry:电话注册服务
- HardwarePropertiesManagerService:硬件属性管理服务