Android 12系统源码_系统启动(三)SystemServer进程

发布于:2025-03-29 ⋅ 阅读:(26) ⋅ 点赞:(0)

前言

SystemServer 是 Android 系统的核心进程,由 Zygote 孵化,负责启动和管理所有核心系统服务,像是常见的ActivityManagerService、WindowManagerService、PackageManagerService、PowerManagerService等服务,都是在SystemServer的main方法中能够初始化的,这些服务都是运行在system_server进程的线程中。它是 Android 框架层的“大脑”,直接决定了系统的功能性和稳定性。

Zygote进程进入system_server进程

我们在Android 12系统源码_系统启动(二)Zygote进程中有讲过 ZygoteInit的main方法,在解析到 start-system-server 参数后会调用 forkSystemServer方法。

public class ZygoteInit {
    public static void main(String[] argv) {
    		...代码省略...
            if (startSystemServer) {
                //注释1,fork出system_server子进程
                Runnable r = forkSystemServer(abiList, zygoteSocketName, zygoteServer);
                //如果是父进程则返回null,如果是system_server子进程则返回SystemServerRunnable
                if (r != null) {
                    r.run();//注释2,在子进程(system_server)中执行,SystemServerRunnable的run方法会进入了SystemServer的main方法
                    return;
                }
            }
         	...代码省略...
	}
	
   private static Runnable forkSystemServer(String abiList, String socketName,ZygoteServer zygoteServer) {
       ...代码省略...
       /* Hardcoded command line to start the system server */
       String[] args = {
               "--setuid=1000",//用户id
               "--setgid=1000",//组id
               "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023,"
                       + "1024,1032,1065,3001,3002,3003,3006,3007,3009,3010,3011,3012",
               "--capabilities=" + capabilities + "," + capabilities,
               "--nice-name=system_server",
               "--runtime-args",
               "--target-sdk-version=" + VMRuntime.SDK_VERSION_CUR_DEVELOPMENT,
               "com.android.server.SystemServer",//SystemServer类名,只有这个条目是非--开头的
       };
        if (pid == 0) {
           ...代码省略...
           //由于zygoteServer只有Zygote会使用,子进程system_server不需要使用,于是会将其关闭。
           zygoteServer.closeServerSocket();
           //继续调用handleSystemServerProcess方法
           return handleSystemServerProcess(parsedArgs);
       }
       return null;
   }
   
	private static Runnable handleSystemServerProcess(ZygoteArguments parsedArgs) {
       ...代码省略...
        //调用ZygoteInit的zygoteInit方法
        return ZygoteInit.zygoteInit(parsedArgs.mTargetSdkVersion,
                parsedArgs.mDisabledCompatChanges,
                parsedArgs.mRemainingArgs, cl);
  	}
   public static Runnable zygoteInit(int targetSdkVersion, long[] disabledCompatChanges,
           String[] argv, ClassLoader classLoader) {
       ...代码省略...
       //调用RuntimeInit的applicationInit方法
       return RuntimeInit.applicationInit(targetSdkVersion, disabledCompatChanges, argv,
               classLoader);
   }
}

 >frameworks/base/core/java/com/android/internal/os/RuntimeInit.java
 public class RuntimeInit {
     protected static Runnable applicationInit(int targetSdkVersion, long[] disabledCompatChanges,
            String[] argv, ClassLoader classLoader) {
       	...代码省略...
       	final Arguments args = new Arguments(argv);//解析参数argv
        return findStaticMain(args.startClass, args.startArgs, classLoader);
    }
    static class Arguments {
        String startClass;//类路径
        String[] startArgs;//参数
        
        Arguments(String args[]) throws IllegalArgumentException {
            parseArgs(args);
        }

        private void parseArgs(String args[])
                throws IllegalArgumentException {
            int curArg = 0;
            for (; curArg < args.length; curArg++) {
                String arg = args[curArg];
                if (arg.equals("--")) {
                    curArg++;
                    break;
                } else if (!arg.startsWith("--")) {//com.android.server.SystemServer字符串
                    break;
                }
            }
            if (curArg == args.length) {
                throw new IllegalArgumentException("Missing classname argument to RuntimeInit!");
            }
            startClass = args[curArg++];
            startArgs = new String[args.length - curArg];
            System.arraycopy(args, curArg, startArgs, 0, startArgs.length);
        }        
    }
    
    protected static Runnable findStaticMain(String className, String[] argv, ClassLoader classLoader) {
        Class<?> cl;
		...代码省略..
        //获取到SystemServer的类类型
         cl = Class.forName(className, true, classLoader);
		...代码省略..
        Method m;
        //获取到main方法的方法id
        m = cl.getMethod("main", new Class[] { String[].class });
		...代码省略..
        //这个就是ZygoteInit类中forkSystemServer的返回值r
        return new MethodAndArgsCaller(m, argv);
    }
    
    static class MethodAndArgsCaller implements Runnable {
        private final Method mMethod;
        private final String[] mArgs;
        public MethodAndArgsCaller(Method method, String[] args) {
            mMethod = method;
            mArgs = args;
        }
        public void run() {
            ...代码省略...
            //通过反射调用mMethod静态方法,这里触发的其实就是SystemServer的main方法
            mMethod.invoke(null, new Object[] { mArgs });
            ...代码省略...
        }
    }

Zygote进程对应的ZygoteInit的main方法会调用forkSystemServer方法fork出system_server这个子进程,该方法会解析args参数,最终返回MethodAndArgsCaller对象,并进入system_server进程,然后在system_server进程中调用MethodAndArgsCaller的run方法,最终会进入SystemServer的main方法。

SystemServer的main方法

frameworks/base/services/java/com/android/server/SystemServer.java

public final class SystemServer implements Dumpable {

	public static void main(String[] args) {
	    new SystemServer().run();
	}
	
	 private void run() {
	   TimingsTraceAndSlog t = new TimingsTraceAndSlog();
	    ...代码省略...	
        t.traceBegin("InitBeforeStartServices"); //日志打印:SystemServerTiming: startBootstrapServices
	   	//SystemProperties相关属性设置...
	   	...代码省略...
       	//Here we go! 关键日志打印
       	Slog.i(TAG, "Entered the Android system server!");
       	...代码省略...
	 	//创建Looper对象
	 	Looper.prepareMainLooper();
	 	...代码省略...
	 	//加载动态链接库
	    System.loadLibrary("android_servers");
	  	...代码省略...
	  	//创建一个systemContext,和普通应用的Context一样,system也需要通过Context来获取一些进程的信息环境
	    createSystemContext();//   
	    ...代码省略...
	    t.traceEnd();  //日志打印:startBootstrapServices took to complete: 1588ms
	    ...代码省略...	    
	    // Start services.
	    try {
	         t.traceBegin("StartServices");//日志打印:SystemServerTiming: StartServices
	         //启动引导服务
	         startBootstrapServices(t);
	         //启动核心服务
	         startCoreServices(t);
	         //启动其他服务
	         startOtherServices(t);
	     } catch (Throwable ex) {
	         Slog.e("System", "******************************************");
	         Slog.e("System", "************ Failure starting system services", ex);
	         throw ex;
	     } finally {
	         t.traceEnd(); //日志打印:StartServices took to complete: 3997ms
	     }     
	    ...代码省略...           
	    // Loop forever.
        Looper.loop();
        throw new RuntimeException("Main thread loop unexpectedly exited"); 
	 }
}
frameworks/base/services/core/java/com/android/server/utils/TimingsTraceAndSlog.java
public final class TimingsTraceAndSlog extends TimingsTraceLog {

    public static final String SYSTEM_SERVER_TIMING_TAG = "SystemServerTiming";

    @Override
    public void traceBegin(@NonNull String name) {
    	//打印开始日志,tag为SystemServerTiming,name为开始关键字
        Slog.i(mTag, name);
        super.traceBegin(name);
    }
}
frameworks/base/core/java/android/util/TimingsTraceLog.java
public class TimingsTraceLog {
    public void traceBegin(String name) {
        ...代码省略...
        mCurrentLevel++;
        mStartNames[mCurrentLevel] = name;
        mStartTimes[mCurrentLevel] = SystemClock.elapsedRealtime();
    }
    public void traceEnd() {
        ...代码省略...
        final String name = mStartNames[mCurrentLevel];
        final long duration = SystemClock.elapsedRealtime() - mStartTimes[mCurrentLevel];
        mCurrentLevel--;
        //打印结束日志信息,tag为SystemServerTiming,name为结束关键字,并记录从开始到结束总共花了多长时间
        logDuration(name, duration);
    }
    
    public void logDuration(String name, long timeMs) {
        Slog.d(mTag, name + " took to complete: " + timeMs + "ms");
    }
}

SystemProperties相关属性设置

public final class SystemServer implements Dumpable {

    private static final String SYSPROP_START_COUNT = "sys.system_server.start_count";
    private static final String SYSPROP_START_ELAPSED = "sys.system_server.start_elapsed";
    private static final String SYSPROP_START_UPTIME = "sys.system_server.start_uptime";
 
    private void run() {
             ...代码省略...
            //将启动次数、启动时间写入系统属性
            SystemProperties.set(SYSPROP_START_COUNT, String.valueOf(mStartCount));
            SystemProperties.set(SYSPROP_START_ELAPSED, String.valueOf(mRuntimeStartElapsedTime));
            SystemProperties.set(SYSPROP_START_UPTIME, String.valueOf(mRuntimeStartUptime));
			// 写入系统事件日志(便于调试)
			EventLog.writeEvent(EventLogTags.SYSTEM_SERVER_START,
			        mStartCount, mRuntimeStartUptime, mRuntimeStartElapsedTime);
			//设置默认时区
            String timezoneProperty = SystemProperties.get("persist.sys.timezone");
            if (!isValidTimeZoneId(timezoneProperty)) {
            	//检查时区配置是否有效,无效则默认设为 GMT(格林尼治标准时间)
                Slog.w(TAG, "persist.sys.timezone is not valid (" + timezoneProperty+ "); setting to GMT.");
                SystemProperties.set("persist.sys.timezone", "GMT");
            }
            //处理语言和区域设置
            if (!SystemProperties.get("persist.sys.language").isEmpty()) {
                final String languageTag = Locale.getDefault().toLanguageTag();
                //Android现在统一使用 Locale 类管理区域设置。
                SystemProperties.set("persist.sys.locale", languageTag);
                //清除以前的旧版语言和国家属性
                SystemProperties.set("persist.sys.language", "");
                SystemProperties.set("persist.sys.country", "");
                SystemProperties.set("persist.sys.localevar", "");
            }
            ...代码省略...
            //设置 Dalvik/ART 运行时库
            SystemProperties.set("persist.sys.dalvik.vm.lib.2", VMRuntime.getRuntime().vmLibrary());
            ...代码省略...
    }
}

启动引导服务

public final class SystemServer implements Dumpable {
    private void startBootstrapServices(@NonNull TimingsTraceAndSlog t) {
        t.traceBegin("startBootstrapServices");//日志打印:SystemServerTiming: startBootstrapServices
        
        t.traceBegin("StartWatchdog");//日志打印:SystemServerTiming: StartWatchdog
        //看门狗
        final Watchdog watchdog = Watchdog.getInstance();
        watchdog.start();
        t.traceEnd();//日志打印:SystemServerTiming: StartWatchdog took to complete: 7ms
        
        ...代码省略...
        
        //开启AMS
        t.traceBegin("StartActivityManager");//日志打印:SystemServerTiming: StartActivityManager
        //调用SystemServiceManager的startService方法,开启ActivityTaskManagerService服务
        ActivityTaskManagerService atm = mSystemServiceManager.startService(
                ActivityTaskManagerService.Lifecycle.class).getService();
        //调用ActivityManagerService.Lifecycle的startService方法,开启ActivityManagerService服务
        mActivityManagerService = ActivityManagerService.Lifecycle.startService(
                mSystemServiceManager, atm);
        //让ActivityManagerService持有SystemServiceManager的引用
        mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
        mActivityManagerService.setInstaller(installer);
        mWindowManagerGlobalLock = atm.getGlobalLock();
        t.traceEnd();//日志打印:StartActivityManager took to complete: 348ms
        
        ...代码省略...
        
        t.traceBegin("StartPowerManager");//日志打印:StartPowerManager
        //电源管理服务
        mPowerManagerService = mSystemServiceManager.startService(PowerManagerService.class);
        t.traceEnd();//日志打印:StartPowerManager took to complete: 20ms
        
        t.traceBegin("StartRecoverySystemService");//SystemServerTiming: StartRecoverySystemService
        //RecoverySystem服务
        mSystemServiceManager.startService(RecoverySystemService.Lifecycle.class);
        t.traceEnd();//SystemServerTiming: StartRecoverySystemService took to complete: 1ms

        ...代码省略...
        
        t.traceBegin("StartLightsService");//SystemServerTiming: StartLightsService
        //屏幕亮度服务
        mSystemServiceManager.startService(LightsService.class);
        t.traceEnd();//SystemServerTiming: StartLightsService took to complete: 3ms

        ...代码省略...

        t.traceBegin("StartDisplayManager");//SystemServerTiming: StartDisplayManager
        //屏幕设备管理服务
        mDisplayManagerService = mSystemServiceManager.startService(DisplayManagerService.class);
        t.traceEnd();//SystemServerTiming: StartDisplayManager took to complete: 15ms
        //在初始化PackageManagerService服务之前我们要保证至少有个默认屏幕设备
        t.traceBegin("WaitForDisplay");//SystemServerTiming: WaitForDisplay
        mSystemServiceManager.startBootPhase(t, SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY);
        t.traceEnd();SystemServerTiming: WaitForDisplay took to complete: 9ms
        
        ...代码省略...
        
        t.traceBegin("StartPackageManagerService");//SystemServerTiming: StartPackageManagerService
        try {
            Watchdog.getInstance().pauseWatchingCurrentThread("packagemanagermain");
            //PackageManagerService服务
            mPackageManagerService = PackageManagerService.main(mSystemContext, installer,
                    domainVerificationService, mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF,
                    mOnlyCore);
        } finally {
            Watchdog.getInstance().resumeWatchingCurrentThread("packagemanagermain");
        }
        SystemServerDexLoadReporter.configureSystemServerDexReporter(mPackageManagerService);
        mFirstBoot = mPackageManagerService.isFirstBoot();
        mPackageManager = mSystemContext.getPackageManager();
        t.traceEnd();//SystemServerTiming: StartPackageManagerService took to complete: 1022ms

        ...代码省略...
        
        t.traceBegin("StartUserManagerService");//SystemServerTiming: StartUserManagerService
        //用户管理服务
        mSystemServiceManager.startService(UserManagerService.LifeCycle.class);
        t.traceEnd();//SystemServerTiming: StartUserManagerService took to complete: 0ms
        
        ...代码省略...
        
        t.traceBegin("SetSystemProcess");//SystemServerTiming: SetSystemProcess
        mActivityManagerService.setSystemProcess();
        t.traceEnd();//SystemServerTiming: SetSystemProcess took to complete: 5ms
        
        ...代码省略...
        
        t.traceBegin("InitWatchdog");//SystemServerTiming: InitWatchdog
        watchdog.init(mSystemContext, mActivityManagerService);
        t.traceEnd();//SystemServerTiming: InitWatchdog took to complete: 0ms
        
        ...代码省略...
        
        t.traceBegin("StartOverlayManagerService");//SystemServerTiming: StartOverlayManagerService
        mSystemServiceManager.startService(new OverlayManagerService(mSystemContext));
        t.traceEnd();//SystemServerTiming: StartOverlayManagerService took to complete: 77ms

        ...代码省略...
        
        t.traceBegin("StartSensorService");//SystemServerTiming: StartSensorService
        mSystemServiceManager.startService(SensorService.class);
        t.traceEnd(); //SystemServerTiming: StartSensorService took to complete: 1ms
        
        t.traceEnd();//SystemServerTiming: startBootstrapServices took to complete: 1588ms
    }
}

启动核心服务

public final class SystemServer implements Dumpable {
    private void startCoreServices(@NonNull TimingsTraceAndSlog t) {
        t.traceBegin("startCoreServices");//SystemServerTiming: startCoreServices

        t.traceBegin("StartSystemConfigService");//SystemServerTiming: StartSystemConfigService
        mSystemServiceManager.startService(SystemConfigService.class);//系统设置
        t.traceEnd();//SystemServerTiming: StartSystemConfigService took to complete: 0ms

        t.traceBegin("StartBatteryService");//SystemServerTiming: StartBatteryService
        mSystemServiceManager.startService(BatteryService.class);//电池状态监控
        t.traceEnd();//SystemServerTiming: StartBatteryService took to complete: 15ms

        t.traceBegin("StartUsageService");//SystemServerTiming: StartUsageService
        mSystemServiceManager.startService(UsageStatsService.class);//用户状态服务
        mActivityManagerService.setUsageStatsManager(
                LocalServices.getService(UsageStatsManagerInternal.class));
        t.traceEnd();//SystemServerTiming: StartUsageService took to complete: 5ms

        if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_WEBVIEW)) {
            t.traceBegin("StartWebViewUpdateService");//SystemServerTiming: StartWebViewUpdateService
            mWebViewUpdateService = mSystemServiceManager.startService(WebViewUpdateService.class);
            t.traceEnd();//SystemServerTiming: StartWebViewUpdateService took to complete: 1ms
        }

        t.traceBegin("StartCachedDeviceStateService");//SystemServerTiming: StartCachedDeviceStateService
        mSystemServiceManager.startService(CachedDeviceStateService.class);
        t.traceEnd();//SystemServerTiming: StartCachedDeviceStateService took to complete: 0ms

        // Tracks cpu time spent in binder calls
        t.traceBegin("StartBinderCallsStatsService");//SystemServerTiming: StartBinderCallsStatsService
        mSystemServiceManager.startService(BinderCallsStatsService.LifeCycle.class);
        t.traceEnd();//SystemServerTiming: StartBinderCallsStatsService took to complete: 0ms

        // Tracks time spent in handling messages in handlers.
        t.traceBegin("StartLooperStatsService");//SystemServerTiming: StartLooperStatsService
        mSystemServiceManager.startService(LooperStatsService.Lifecycle.class);
        t.traceEnd();//SystemServerTiming: StartLooperStatsService took to complete: 1ms

        // Manages apk rollbacks.
        t.traceBegin("StartRollbackManagerService");//SystemServerTiming: StartRollbackManagerService
        mSystemServiceManager.startService(ROLLBACK_MANAGER_SERVICE_CLASS);
        t.traceEnd();//SystemServerTiming: StartRollbackManagerService took to complete: 19ms

        // Tracks native tombstones.
        t.traceBegin("StartNativeTombstoneManagerService");//SystemServerTiming: StartNativeTombstoneManagerService
        mSystemServiceManager.startService(NativeTombstoneManagerService.class);
        t.traceEnd();//SystemServerTiming: StartNativeTombstoneManagerService took to complete: 4ms

        // Service to capture bugreports.
        t.traceBegin("StartBugreportManagerService");//SystemServerTiming: StartBugreportManagerService
        mSystemServiceManager.startService(BugreportManagerService.class);
        t.traceEnd();//SystemServerTiming: StartBugreportManagerService took to complete: 1ms

        // Serivce for GPU and GPU driver.
        t.traceBegin("GpuService");//SystemServerTiming: GpuService
        mSystemServiceManager.startService(GpuService.class);//GPU服务
        t.traceEnd();//SystemServerTiming: GpuService took to complete: 0ms

        t.traceEnd(); // SystemServerTiming: startCoreServices took to complete: 47ms
    }
}    

启动其他服务

public final class SystemServer implements Dumpable {

    private static final String ACCOUNT_SERVICE_CLASS =
            "com.android.server.accounts.AccountManagerService$Lifecycle";
    private static final String STORAGE_MANAGER_SERVICE_CLASS =
            "com.android.server.StorageManagerService$Lifecycle";
    private static final String STORAGE_STATS_SERVICE_CLASS =
            "com.android.server.usage.StorageStatsService$Lifecycle";
     private static final String USB_SERVICE_CLASS =
            "com.android.server.usb.UsbService$Lifecycle"; 
                      
    private void startOtherServices(@NonNull TimingsTraceAndSlog t) {
         t.traceBegin("startOtherServices");//SystemServerTiming: startOtherServices

        final Context context = mSystemContext;
        DynamicSystemService dynamicSystem = null;
        IStorageManager storageManager = null;//StorageManagerService,管理存储设备(如 SD 卡挂载)
        NetworkManagementService networkManagement = null;//管理网络连接(Wi-Fi、移动数据)
        IpSecService ipSecService = null;
        VpnManagerService vpnManager = null;//VNP管理服务
        VcnManagementService vcnManagement = null;
        NetworkStatsService networkStats = null;
        NetworkPolicyManagerService networkPolicy = 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;
        PacProxyService pacProxyService = null;   
        
		...代码省略...
		
         mContentResolver = context.getContentResolver();

         // The AccountManager must come before the ContentService
         t.traceBegin("StartAccountManagerService");//SystemServerTiming: StartAccountManagerService
         //账号管理服务
         mSystemServiceManager.startService(ACCOUNT_SERVICE_CLASS);
         t.traceEnd();//SystemServerTiming: StartAccountManagerService took to complete: 12ms
         
         ...代码省略...
         		
         t.traceBegin("StartInputManagerService");//SystemServerTiming: StartInputManagerService
         inputManager = new InputManagerService(context);
         t.traceEnd();//SystemServerTiming: StartInputManagerService took to complete: 12ms

         t.traceBegin("DeviceStateManagerService");//SystemServerTiming: DeviceStateManagerService
         mSystemServiceManager.startService(DeviceStateManagerService.class);
         t.traceEnd();//SystemServerTiming: DeviceStateManagerService took to complete: 3ms

         if (!disableCameraService) {
             t.traceBegin("StartCameraServiceProxy");//SystemServerTiming: StartCameraServiceProxy
             mSystemServiceManager.startService(CameraServiceProxy.class);
             t.traceEnd();//SystemServerTiming: StartCameraServiceProxy took to complete: 6ms
         }

         t.traceBegin("StartWindowManagerService");//SystemServerTiming: StartWindowManagerService
         // WMS needs sensor service ready
         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();//SystemServerTiming: StartWindowManagerService took to complete: 73ms

         t.traceBegin("SetWindowManagerService");//SystemServerTiming: SetWindowManagerService
         //创建屏幕设备对象
         mActivityManagerService.setWindowManager(wm);
         t.traceEnd();//SystemServerTiming: SetWindowManagerService took to complete: 72ms

         t.traceBegin("WindowManagerServiceOnInitReady");//SystemServerTiming: WindowManagerServiceOnInitReady
         wm.onInitReady();
         t.traceEnd();//SystemServerTiming: WindowManagerServiceOnInitReady took to complete: 13ms		

         ...代码省略...
         
         t.traceBegin("StartInputManager");//SystemServerTiming: StartInputManager
         inputManager.setWindowManagerCallbacks(wm.getInputManagerCallback());
         inputManager.start();
         t.traceEnd();//SystemServerTiming: StartInputManager took to complete: 19ms
         
         t.traceBegin("DisplayManagerWindowManagerAndInputReady");//SystemServerTiming: DisplayManagerWindowManagerAndInputReady
         mDisplayManagerService.windowManagerAndInputReady();
         t.traceEnd();//SystemServerTiming: DisplayManagerWindowManagerAndInputReady took to complete: 0ms

         if (mFactoryTestMode == FactoryTest.FACTORY_TEST_LOW_LEVEL) {
             Slog.i(TAG, "No Bluetooth Service (factory test)");
         } else if (!context.getPackageManager().hasSystemFeature
                 (PackageManager.FEATURE_BLUETOOTH)) {
             Slog.i(TAG, "No Bluetooth Service (Bluetooth Hardware Not Present)");
         } else {
             t.traceBegin("StartBluetoothService");//SystemServerTiming: StartBluetoothService
             //蓝牙服务
             mSystemServiceManager.startService(BluetoothService.class);
             t.traceEnd();//SystemServerTiming: StartBluetoothService took to complete: 2ms
         }    
         
         ...代码省略...
         
        t.traceBegin("MakeDisplayReady");//SystemServerTiming: MakeDisplayReady
        try {
            wm.displayReady();
        } catch (Throwable e) {
            reportWtf("making display ready", e);
        }
        t.traceEnd(); //SystemServerTiming: MakeDisplayReady took to complete: 17ms
                
        if (mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL) {
            if (!"0".equals(SystemProperties.get("system_init.startmountservice"))) {
                t.traceBegin("StartStorageManagerService");//SystemServerTiming: StartStorageManagerService
                try {
                    /*
                     * NotificationManagerService is dependant on StorageManagerService,
                     * (for media / usb notifications) so we must start StorageManagerService first.
                     */
                    mSystemServiceManager.startService(STORAGE_MANAGER_SERVICE_CLASS);
                    storageManager = IStorageManager.Stub.asInterface(
                            ServiceManager.getService("mount"));
                } catch (Throwable e) {
                    reportWtf("starting StorageManagerService", e);
                }
                t.traceEnd();//SystemServerTiming: StartStorageManagerService took to complete: 19ms

                t.traceBegin("StartStorageStatsService");//SystemServerTiming: StartStorageStatsService
                try {
                    mSystemServiceManager.startService(STORAGE_STATS_SERVICE_CLASS);
                } catch (Throwable e) {
                    reportWtf("starting StorageStatsService", e);
                }
                t.traceEnd();//SystemServerTiming: StartStorageStatsService took to complete: 5ms
            }
        }
        
         ...代码省略...
         
       t.traceBegin("StartUiModeManager");//SystemServerTiming: StartUiModeManager
       //UI Mode 模式管理
       mSystemServiceManager.startService(UiModeManagerService.class);
       t.traceEnd();//SystemServerTiming: StartUiModeManager took to complete: 2ms
       
       ...代码省略...
                
       t.traceBegin("StartStatusBarManagerService");//SystemServerTiming: StartStatusBarManagerService
       try {
           statusBar = new StatusBarManagerService(context);//系统栏管理服务
           ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);
       } catch (Throwable e) {
           reportWtf("starting StatusBarManagerService", e);
       }
       t.traceEnd();//SystemServerTiming: StartStatusBarManagerService took to complete: 0ms
       
       ...代码省略...
       
        t.traceBegin("StartNetworkManagementService");//SystemServerTiming: StartNetworkManagementService
        try {
            networkManagement = NetworkManagementService.create(context);
            ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement);
        } catch (Throwable e) {
            reportWtf("starting NetworkManagement Service", e);
        }
        t.traceEnd();//SystemServerTiming: StartNetworkManagementService took to complete: 4ms
        
       ...代码省略...
       
        t.traceBegin("StartFontManagerService");//SystemServerTiming: StartFontManagerService
        //字体服务
        mSystemServiceManager.startService(new FontManagerService.Lifecycle(context, safeMode));
        t.traceEnd();//SystemServerTiming: StartFontManagerService took to complete: 111ms       

       ...代码省略...

        t.traceBegin("StartNetworkPolicyManagerService");//SystemServerTiming: StartNetworkManagementService
        try {
            networkPolicy = new NetworkPolicyManagerService(context, mActivityManagerService,
                    networkManagement);
            ServiceManager.addService(Context.NETWORK_POLICY_SERVICE, networkPolicy);
        } catch (Throwable e) {
            reportWtf("starting NetworkPolicy Service", e);
        }
        t.traceEnd();//SystemServerTiming: StartNetworkManagementService took to complete: 4ms

        if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) {
            // Wifi Service must be started first for wifi-related services.
            t.traceBegin("StartWifi");//SystemServerTiming: StartWifi
            //WIFI服务
            mSystemServiceManager.startServiceFromJar(
                    WIFI_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);
            t.traceEnd();//SystemServerTiming: StartWifi took to complete: 163ms
            t.traceBegin("StartWifiScanning");//SystemServerTiming: StartWifiScanning
            //WIFI扫描服务
            mSystemServiceManager.startServiceFromJar(
                    WIFI_SCANNING_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);
            t.traceEnd();//SystemServerTiming: StartWifiScanning took to complete: 13ms
        }

        if (context.getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_WIFI_RTT)) {
            t.traceBegin("StartRttService");//SystemServerTiming: StartRttService
            //RTT服务
            mSystemServiceManager.startServiceFromJar(
                    WIFI_RTT_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);
            t.traceEnd();//SystemServerTiming: StartRttService took to complete: 1ms
        }

        if (context.getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_WIFI_DIRECT)) {
            t.traceBegin("StartWifiP2P");//SystemServerTiming: StartWifiP2P
            //P2P服务
            mSystemServiceManager.startServiceFromJar(
                    WIFI_P2P_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);
            t.traceEnd();//SystemServerTiming: StartWifiP2P took to complete: 8ms
        }
        
       ...代码省略...
       
         t.traceBegin("StartVpnManagerService");//SystemServerTiming: StartVpnManagerService
         try {
             vpnManager = VpnManagerService.create(context);
             ServiceManager.addService(Context.VPN_MANAGEMENT_SERVICE, vpnManager);
         } catch (Throwable e) {
             reportWtf("starting VPN Manager Service", e);
         }
         t.traceEnd();//SystemServerTiming: StartVpnManagerService took to complete: 3ms

       ...代码省略...

         t.traceBegin("StartSystemUpdateManagerService");//SystemServerTiming: StartSystemUpdateManagerService
         try {
             ServiceManager.addService(Context.SYSTEM_UPDATE_SERVICE,
                     new SystemUpdateManagerService(context));
         } catch (Throwable e) {
             reportWtf("starting SystemUpdateManagerService", e);
         }
         t.traceEnd();//SystemServerTiming: StartSystemUpdateManagerService took to complete: 1ms

       ...代码省略...

         t.traceBegin("StartNotificationManager");//SystemServerTiming: StartNotificationManager
         mSystemServiceManager.startService(NotificationManagerService.class);
         SystemNotificationChannels.removeDeprecated(context);
         SystemNotificationChannels.createAll(context);
         notification = INotificationManager.Stub.asInterface(
         ServiceManager.getService(Context.NOTIFICATION_SERVICE));
         t.traceEnd();//SystemServerTiming: StartNotificationManager took to complete: 30ms
         
         t.traceBegin("StartDeviceMonitor");//SystemServerTiming: StartDeviceMonitor
         mSystemServiceManager.startService(DeviceStorageMonitorService.class);
         t.traceEnd();//SystemServerTiming: StartDeviceMonitor took to complete: 8ms

         t.traceBegin("StartLocationManagerService");//SystemServerTiming: StartLocationManagerService
         mSystemServiceManager.startService(LocationManagerService.Lifecycle.class);
         t.traceEnd();//SystemServerTiming: StartLocationManagerService took to complete: 3ms
         
       	 ...代码省略...
       
          if (context.getResources().getBoolean(R.bool.config_enableWallpaperService)) {
              t.traceBegin("StartWallpaperManagerService");//SystemServerTiming: StartWallpaperManagerService
              mSystemServiceManager.startService(WALLPAPER_SERVICE_CLASS);
              t.traceEnd();//SystemServerTiming: StartWallpaperManagerService took to complete: 2ms
          } else {
              Slog.i(TAG, "Wallpaper service disabled by config");
          }
          
          t.traceBegin("StartAudioService");//SystemServerTiming: StartAudioService
          if (!isArc) {
              mSystemServiceManager.startService(AudioService.Lifecycle.class);
          } else {
              String className = context.getResources()
                      .getString(R.string.config_deviceSpecificAudioService);
              try {
                  mSystemServiceManager.startService(className + "$Lifecycle");
              } catch (Throwable e) {
                  reportWtf("starting " + className, e);
              }
          }
          t.traceEnd();//SystemServerTiming: StartAudioService took to complete: 98ms
          
       	 ...代码省略...
       	 
         t.traceBegin("StartAdbService");//SystemServerTiming: StartAdbService
         try {
             mSystemServiceManager.startService(ADB_SERVICE_CLASS);//开启ADB调试服务
         } catch (Throwable e) {
             Slog.e(TAG, "Failure starting AdbService");
         }
         t.traceEnd();//SystemServerTiming: StartAdbService took to complete: 1ms
         
         if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)
                 || mPackageManager.hasSystemFeature(
                 PackageManager.FEATURE_USB_ACCESSORY)
                 || isEmulator) {
             // Manage USB host and device support
             t.traceBegin("StartUsbService");//SystemServerTiming: StartUsbService
             mSystemServiceManager.startService(USB_SERVICE_CLASS);//开启USB服务
             t.traceEnd();//SystemServerTiming: StartUsbService took to complete: 1ms
         }
         
       	 ...代码省略...
       	 
        t.traceBegin("StartClipboardService");//SystemServerTiming: StartClipboardService
        //剪切板服务
        mSystemServiceManager.startService(ClipboardService.class);
        t.traceEnd();//SystemServerTiming: StartClipboardService took to complete: 2ms
        
        t.traceBegin("AppServiceManager");//SystemServerTiming: AppServiceManager
        mSystemServiceManager.startService(AppBindingService.Lifecycle.class);
        t.traceEnd();//SystemServerTiming: AppServiceManager took to complete: 0ms

        t.traceBegin("startTracingServiceProxy");//SystemServerTiming: startTracingServiceProxy
        mSystemServiceManager.startService(TracingServiceProxy.class);
        t.traceEnd();//SystemServerTiming: startTracingServiceProxy took to complete: 1ms
    
       	 ...代码省略...
       	 
        t.traceBegin("MakeWindowManagerServiceReady");//SystemServerTiming: MakeWindowManagerServiceReady
        try {
            wm.systemReady();
        } catch (Throwable e) {
            reportWtf("making Window Manager Service ready", e);
        }
        t.traceEnd();//SystemServerTiming: MakeWindowManagerServiceReady took to complete: 2ms

       	 ...代码省略...
       	 
        final Configuration config = wm.computeNewConfiguration(DEFAULT_DISPLAY);
        DisplayMetrics metrics = new DisplayMetrics();
        context.getDisplay().getMetrics(metrics);
        context.getResources().updateConfiguration(config, metrics);
        // The system context's theme may be configuration-dependent.
        final Theme systemTheme = context.getTheme();
        if (systemTheme.getChangingConfigurations() != 0) {
            systemTheme.rebase();
        }

        t.traceBegin("MakePowerManagerServiceReady");//SystemServerTiming: MakePowerManagerServiceReady
        try {
            // TODO: use boot phase
            mPowerManagerService.systemReady(mActivityManagerService.getAppOpsService());
        } catch (Throwable e) {
            reportWtf("making Power Manager Service ready", e);
        }
        t.traceEnd();//SystemServerTiming: MakePowerManagerServiceReady took to complete: 19ms

        //调用ActivityManagerService的systemReady方法
        mActivityManagerService.systemReady(() -> {
            Slog.i(TAG, "Making services ready");
		}
		
        t.traceBegin("StartSystemUI");//SystemServerTiming: StartSystemUI
        try {
            startSystemUi(context, windowManagerF);
        } catch (Throwable e) {
            reportWtf("starting System UI", e);
        }
        t.traceEnd();//SystemServerTiming: StartSystemUI took to complete: 10ms

        t.traceEnd(); //SystemServerTiming: startOtherServices took to complete: 2362ms
    }
}

时序图

时序图