Android SystemServer.java所做的事

总结:

此文件

    1. 启动Binder线程池(用来与其他进程通信)

    2. 创建mSystemManagerServer,利用其startService函数启动其他服务并同时用其addService函数完成对此服务的注册

官方分类三大服务类型,具体服务被划分在startBootstrapServicesstartCoreServicesstartOtherServices对应类型服务函数中注册:

761        // Start services. 
762 try {
763 t.traceBegin("StartServices");
764 startBootstrapServices(t);//引导服务

      主要启动以下10个服务:

765            startCoreServices(t);//核心服务
主要启动以下10个服务:
766 startOtherServices(t);//其他服务
767 } catch (Throwable ex) {
768 Slog.e("System", "******************************************");
769 Slog.e("System", "************ Failure starting system services", ex);
770 throw ex;
771 } finally {
772 t.traceEnd(); // StartServices
773 }
  • SystemServer在启动服务前,会尝试与Zygote建立Socket通信,通信成功后才去启动服务
  • 启动的服务都单独运行在SystemServer的各自线程中,同属于SystemServer进程
Line 723: LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
Line 909: ServiceManager.addService(Context.PLATFORM_COMPAT_SERVICE, platformCompat);
Line 910: ServiceManager.addService(Context.PLATFORM_COMPAT_NATIVE_SERVICE,
Line 948: ServiceManager.addService(OplusDevicepolicyManager.SERVICE_NAME, mOplusDevicePolicyManagerService);
Line 1339: ServiceManager.addService("sec_key_att_app_id_provider",
Line 1348: ServiceManager.addService("scheduling_policy", new SchedulingPolicyService());
Line 1358: ServiceManager.addService("telephony.registry", telephonyRegistry);
Line 1391: ServiceManager.addService("vibrator", vibrator);
Line 1396: ServiceManager.addService("dynamic_system", dynamicSystem);
Line 1402: ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr);
Line 1438: ServiceManager.addService(Context.WINDOW_SERVICE, wm, /* allowIsolated= */ false,
Line 1440: ServiceManager.addService(Context.INPUT_SERVICE, inputManager,
Line 1684: ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);
Line 1689: ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);
Line 1740: ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement);
Line 1750: ServiceManager.addService(Context.IPSEC_SERVICE, ipSecService);
Line 1774: ServiceManager.addService(Context.NETWORK_STATS_SERVICE, networkStats);
Line 1784: ServiceManager.addService(Context.NETWORK_POLICY_SERVICE, networkPolicy);
Line 1842: ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity,
Line 1866: ServiceManager.addService("wigigp2p", (IBinder) wigigP2pService);
Line 1873: ServiceManager.addService("wigig", (IBinder) wigigService);
Line 1882: ServiceManager.addService(
Line 1891: ServiceManager.addService(Context.SYSTEM_UPDATE_SERVICE,
Line 1900: ServiceManager.addService(Context.UPDATE_LOCK_SERVICE,
Line 1971: ServiceManager.addService(Context.COUNTRY_DETECTOR, countryDetector);
Line 2097: ServiceManager.addService(Context.SERIAL_SERVICE, serial);
Line 2107: ServiceManager.addService(Context.HARDWARE_PROPERTIES_SERVICE,
Line 2186: ServiceManager.addService("diskstats", new DiskStatsService(context));
Line 2209: ServiceManager.addService(Context.CABC_SERVICE, cabcService);
Line 2225: //ServiceManager.addService(FelicadeviceManager.SERVICE_NAME, mFelicadeviceService);
Line 2226: ServiceManager.addService("felicaser", mFelicadeviceService);
Line 2236: ServiceManager.addService("runtime", new RuntimeService(context));
Line 2246: ServiceManager.addService(Context.ORMS_SERVICE, new OplusResourceManagerService(context));
Line 2268: ServiceManager.addService(Context.HEIMDALL_SERVICE, heimdallService);
Line 2292: ServiceManager.addService("network_time_update_service", networkTimeUpdater);
Line 2327: ServiceManager.addService(GraphicsStatsService.GRAPHICS_STATS_SERVICE,
Line 2333: ServiceManager.addService(CoverageService.COVERAGE_SERVICE, new CoverageService());
Line 2395: ServiceManager.addService(Context.MEDIA_ROUTER_SERVICE, mediaRouter);
Line 2524: ServiceManager.addService(LinearmotorVibrator.LINEARMOTORVIBRATOR_SERVICE, linearVibrator);
Line 2531: ServiceManager.addService(STORAGEHEALTHINFO_SERVICE, storageHealthInfo);
Line 3051: ServiceManager.addService(Context.TETHERING_SERVICE, service,

    3. 在startOtherServices方法中利用mActivityManagerService的 systemReady方法,后者调用了ActivityStackSupervisor的resumeFocusStackTopActivityLocked方法…….最终调用AMS的startHomeActivityLocked方法启动launcher(Android系统的桌面)

---------------------------------------------------Tips-------------------------------------------------

tip1:

String timezoneProperty = SystemProperties.get("persist.sys.timezone"); 
594 if (timezoneProperty == null || timezoneProperty.isEmpty()) {
595 Slog.w(TAG, "Timezone not set; setting to GMT.");
596 SystemProperties.set("persist.sys.timezone", "GMT");
597 }
解析:
函数里临时变量创建赋值后,对其进行为空判断往往null和isEmpty会联合使用,前者判断分配内存与否、后者判断值是否为空

String a = new String();

String b = “”;//空串代表值为空

String c = null;

  1. 此时a是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已)
  2. 此时b是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串)
  3. 此时c是未分配内存空间,无值,是一种无值(值不存在)

tip2:

811 private boolean isFirstBootOrUpgrade() {
812 return mPackageManagerService.isFirstBoot() || 
813 mPackageManagerService.isDeviceUpgrading();

PMS有可以判断第一次开机、是否刚更新的函数等

posted @ 2022-03-15 19:04  小汀  阅读(154)  评论(0编辑  收藏  举报