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

前言

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

Zygote进程进入system_server进程

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

java 复制代码
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

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相关属性设置

java 复制代码
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());
            ...代码省略...
    }
}

启动引导服务

java 复制代码
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
    }
}

启动核心服务

java 复制代码
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
    }
}    

启动其他服务

java 复制代码
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
    }
}

时序图

相关推荐
祖国的好青年1 小时前
VS Code 搭建 React Native 开发环境(Windows 实战指南)
android·windows·react native·react.js
黄林晴1 小时前
警惕!AGP 9.2 别只改版本号,R8 规则与构建链路全线收紧
android·gradle
小米渣的逆袭2 小时前
Android ADB 完全使用指南
android·adb
儿歌八万首2 小时前
Jetpack Compose Canvas 进阶:结合 animateFloatAsState 让自定义图形动起来
android·动画·compose
zhangphil3 小时前
Android Page 3 Flow读sql数据库媒体文件,Kotlin
android·kotlin
神探小白牙3 小时前
echarts,3d堆叠图
android·3d·echarts
李白的天不白3 小时前
如何项目发布到github上
android·vue.js
summerkissyou19873 小时前
Android-RTC、NTP 和 System Time(系统时间)
android
小书房3 小时前
Kotlin使用体验及理解1
android·开发语言·kotlin
撩得Android一次心动4 小时前
Android Navigation 组件全面讲解
android·jetpack·navigation