Android systemserver分析ThrottleService 介绍

System Server是Android系统的核心,他在Dalvik虚拟机启动后立即开始初始化和运行。其它的系统服务在System Server进程的环境中运行。/base/services/java/com/android/server/SystemServer.java

Java代码  收藏代码
  1. /**  
  2.  * This method is called from Zygote to initialize the system. This will cause the native 
  3.  * services (SurfaceFlinger, AudioFlinger, etc..) to be started. After that it will call back  
  4.  * up into init2() to start the Android services.  
  5.  */   
  6. native   public   static   void  init1(String[] args);  
  7.   
  8. public   static   void  main(String[] args) {  
  9.     if  (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {  
  10.         // If a device's clock is before 1970 (before 0), a lot of   
  11.         // APIs crash dealing with negative numbers, notably   
  12.         // java.io.File#setLastModified, so instead we fake it and   
  13.         // hope that time from cell towers or NTP fixes it   
  14.         // shortly.   
  15.         Slog.w(TAG, "System clock is before 1970; setting to 1970." );  
  16.         SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);  
  17.     }  
  18.   
  19.     if  (SamplingProfilerIntegration.isEnabled()) {  
  20.         SamplingProfilerIntegration.start();  
  21.         timer = new  Timer();  
  22.         timer.schedule(new  TimerTask() {  
  23.             @Override   
  24.             public   void  run() {  
  25.                 SamplingProfilerIntegration.writeSnapshot("system_server" );  
  26.             }  
  27.         }, SNAPSHOT_INTERVAL, SNAPSHOT_INTERVAL);  
  28.     }  
  29.   
  30.     // The system server has to run all of the time, so it needs to be   
  31.     // as efficient as possible with its memory usage.   
  32.     VMRuntime.getRuntime().setTargetHeapUtilization(0 .8f);  
  33.       
  34.     System.loadLibrary("android_servers" );  
  35.     init1(args);  
  36. }  
  37.   
  38. public   static   final   void  init2() {  
  39.     Slog.i(TAG, "Entered the Android system server!" );  
  40.     Thread thr = new  ServerThread();  
  41.     thr.setName("android.server.ServerThread" );  
  42.     thr.start();  
  43. }  

 在main函数中,首先检查系统时间设置和SamplingProfiler。然后加载一个叫android_servers的本地库,他提供本 地方法的接口(源程序在framework/base/services/jni/目录中)。然后调用本地方法设置服务。具体执行设置的代码在 frameworks/base/cmds/system_server/library/system_init.cpp中。

C代码  收藏代码
  1. extern   "C"  status_t system_init()  
  2. {  
  3.     LOGI("Entered system_init()" );  
  4.       
  5.     sp<ProcessState> proc(ProcessState::self());  
  6.       
  7.     sp<IServiceManager> sm = defaultServiceManager();  
  8.     LOGI("ServiceManager: %p " , sm.get());  
  9.       
  10.     sp<GrimReaper> grim = new  GrimReaper();  
  11.     sm->asBinder()->linkToDeath(grim, grim.get(), 0);  
  12.       
  13.     char  propBuf[PROPERTY_VALUE_MAX];  
  14.     property_get("system_init.startsurfaceflinger" , propBuf,  "1" );  
  15.     if  (strcmp(propBuf,  "1" ) == 0) {  
  16.         // Start the SurfaceFlinger   
  17.         SurfaceFlinger::instantiate();  
  18.     }  
  19.   
  20.     // Start the sensor service   
  21.     SensorService::instantiate();  
  22.   
  23.     // On the simulator, audioflinger et al don't get started the   
  24.     // same way as on the device, and we need to start them here   
  25.     if  (!proc->supportsProcesses()) {  
  26.   
  27.         // Start the AudioFlinger   
  28.         AudioFlinger::instantiate();  
  29.   
  30.         // Start the media playback service   
  31.         MediaPlayerService::instantiate();  
  32.   
  33.         // Start the camera service   
  34.         CameraService::instantiate();  
  35.   
  36.         // Start the audio policy service   
  37.         AudioPolicyService::instantiate();  
  38.     }  
  39.   
  40.     // And now start the Android runtime.  We have to do this bit   
  41.     // of nastiness because the Android runtime initialization requires   
  42.     // some of the core system services to already be started.   
  43.     // All other servers should just start the Android runtime at   
  44.     // the beginning of their processes's main(), before calling   
  45.     // the init function.   
  46.     LOGI("System server: starting Android runtime. " );  
  47.       
  48.     AndroidRuntime* runtime = AndroidRuntime::getRuntime();  
  49.   
  50.     LOGI("System server: starting Android services. " );  
  51.     runtime->callStatic("com/android/server/SystemServer" ,  "init2" );  
  52.           
  53.     // If running in our own process, just go into the thread   
  54.     // pool.  Otherwise, call the initialization finished   
  55.     // func to let this process continue its initilization.   
  56.     if  (proc->supportsProcesses()) {  
  57.         LOGI("System server: entering thread pool. " );  
  58.         ProcessState::self()->startThreadPool();  
  59.         IPCThreadState::self()->joinThreadPool();  
  60.         LOGI("System server: exiting thread pool. " );  
  61.     }  
  62.     return  NO_ERROR;  
  63. }  

 等初始化传感器,视频,音频等服务后,调用一个回调方法init2 (在SystemServer.java中)。在上面的代码可以看到,这个方法开启了ServerThread来初始化其它的服务。

Java代码  收藏代码
  1. public   void  run() {  
  2.      EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_SYSTEM_RUN,  
  3.          SystemClock.uptimeMillis());  
  4.   
  5.      Looper.prepare();  
  6.   
  7.      android.os.Process.setThreadPriority(  
  8.              android.os.Process.THREAD_PRIORITY_FOREGROUND);  
  9.   
  10.      BinderInternal.disableBackgroundScheduling(true );  
  11.      android.os.Process.setCanSelfBackground(false );  
  12.   
  13.      // Check whether we failed to shut down last time we tried.   
  14.      {  
  15.          final  String shutdownAction = SystemProperties.get(  
  16.                  ShutdownThread.SHUTDOWN_ACTION_PROPERTY, "" );  
  17.          if  (shutdownAction !=  null  && shutdownAction.length() >  0 ) {  
  18.              boolean  reboot = (shutdownAction.charAt( 0 ) ==  '1' );  
  19.   
  20.              final  String reason;  
  21.              if  (shutdownAction.length() >  1 ) {  
  22.                  reason = shutdownAction.substring(1 , shutdownAction.length());  
  23.              } else  {  
  24.                  reason = null ;  
  25.              }  
  26.   
  27.              ShutdownThread.rebootOrShutdown(reboot, reason);  
  28.          }  
  29.      }  
  30.   
  31.      String factoryTestStr = SystemProperties.get("ro.factorytest" );  
  32.      int  factoryTest =  "" .equals(factoryTestStr) ? SystemServer.FACTORY_TEST_OFF  
  33.              : Integer.parseInt(factoryTestStr);  
  34.   
  35.      LightsService lights = null ;  
  36.      PowerManagerService power = null ;  
  37.      BatteryService battery = null ;  
  38.      ConnectivityService connectivity = null ;  
  39.      IPackageManager pm = null ;  
  40.      Context context = null ;  
  41.      WindowManagerService wm = null ;  
  42.      BluetoothService bluetooth = null ;  
  43.      BluetoothA2dpService bluetoothA2dp = null ;  
  44.      HeadsetObserver headset = null ;  
  45.      DockObserver dock = null ;  
  46.      UsbService usb = null ;  
  47.      UiModeManagerService uiMode = null ;  
  48.      RecognitionManagerService recognition = null ;  
  49.      ThrottleService throttle = null ;  
  50.   
  51.      // Critical services...   
  52.      try  {  
  53.          Slog.i(TAG, "Entropy Service" );  
  54.          ServiceManager.addService("entropy" ,  new  EntropyService());  
  55.   
  56.          Slog.i(TAG, "Power Manager" );  
  57.          power = new  PowerManagerService();  
  58.          ServiceManager.addService(Context.POWER_SERVICE, power);  
  59.   
  60.          Slog.i(TAG, "Activity Manager" );  
  61.          context = ActivityManagerService.main(factoryTest);  
  62.   
  63.          Slog.i(TAG, "Telephony Registry" );  
  64.          ServiceManager.addService("telephony.registry" ,  new  TelephonyRegistry(context));  
  65.   
  66.          AttributeCache.init(context);  
  67.   
  68.          Slog.i(TAG, "Package Manager" );  
  69.          pm = PackageManagerService.main(context,  
  70.                  factoryTest != SystemServer.FACTORY_TEST_OFF);  
  71.   
  72.          ActivityManagerService.setSystemProcess();  
  73.   
  74.          mContentResolver = context.getContentResolver();  
  75.   
  76.          // The AccountManager must come before the ContentService   
  77.          try  {  
  78.              Slog.i(TAG, "Account Manager" );  
  79.              ServiceManager.addService(Context.ACCOUNT_SERVICE,  
  80.                      new  AccountManagerService(context));  
  81.          } catch  (Throwable e) {  
  82.              Slog.e(TAG, "Failure starting Account Manager" , e);  
  83.          }  
  84.   
  85.          Slog.i(TAG, "Content Manager" );  
  86.          ContentService.main(context,  
  87.                  factoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL);  
  88.   
  89.          Slog.i(TAG, "System Content Providers" );  
  90.          ActivityManagerService.installSystemProviders();  
  91.   
  92.          Slog.i(TAG, "Battery Service" );  
  93.          battery = new  BatteryService(context);  
  94.          ServiceManager.addService("battery" , battery);  
  95.   
  96.          Slog.i(TAG, "Lights Service" );  
  97.          lights = new  LightsService(context);  
  98.   
  99.          Slog.i(TAG, "Vibrator Service" );  
  100.          ServiceManager.addService("vibrator" ,  new  VibratorService(context));  
  101.   
  102.          // only initialize the power service after we have started the   
  103.          // lights service, content providers and the battery service.   
  104.          power.init(context, lights, ActivityManagerService.getDefault(), battery);  
  105.   
  106.          Slog.i(TAG, "Alarm Manager" );  
  107.          AlarmManagerService alarm = new  AlarmManagerService(context);  
  108.          ServiceManager.addService(Context.ALARM_SERVICE, alarm);  
  109.   
  110.          Slog.i(TAG, "Init Watchdog" );  
  111.          Watchdog.getInstance().init(context, battery, power, alarm,  
  112.                  ActivityManagerService.self());  
  113.   
  114.          Slog.i(TAG, "Window Manager" );  
  115.          wm = WindowManagerService.main(context, power,  
  116.                  factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL);  
  117.          ServiceManager.addService(Context.WINDOW_SERVICE, wm);  
  118.   
  119.          ((ActivityManagerService)ServiceManager.getService("activity" ))  
  120.                  .setWindowManager(wm);  
  121.   
  122.          // Skip Bluetooth if we have an emulator kernel   
  123.          // TODO: Use a more reliable check to see if this product should   
  124.          // support Bluetooth - see bug 988521   
  125.          if  (SystemProperties.get( "ro.kernel.qemu" ).equals( "1" )) {  
  126.              Slog.i(TAG, "Registering null Bluetooth Service (emulator)" );  
  127.              ServiceManager.addService(BluetoothAdapter.BLUETOOTH_SERVICE, null );  
  128.          } else   if  (factoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL) {  
  129.              Slog.i(TAG, "Registering null Bluetooth Service (factory test)" );  
  130.              ServiceManager.addService(BluetoothAdapter.BLUETOOTH_SERVICE, null );  
  131.          } else  {  
  132.              Slog.i(TAG, "Bluetooth Service" );  
  133.              bluetooth = new  BluetoothService(context);  
  134.              ServiceManager.addService(BluetoothAdapter.BLUETOOTH_SERVICE, bluetooth);  
  135.              bluetooth.initAfterRegistration();  
  136.              bluetoothA2dp = new  BluetoothA2dpService(context, bluetooth);  
  137.              ServiceManager.addService(BluetoothA2dpService.BLUETOOTH_A2DP_SERVICE,  
  138.                                        bluetoothA2dp);  
  139.   
  140.              int  bluetoothOn = Settings.Secure.getInt(mContentResolver,  
  141.                  Settings.Secure.BLUETOOTH_ON, 0 );  
  142.              if  (bluetoothOn >  0 ) {  
  143.                  bluetooth.enable();  
  144.              }  
  145.          }  
  146.   
  147.      } catch  (RuntimeException e) {  
  148.          Slog.e("System" ,  "Failure starting core service" , e);  
  149.      }  
  150.   
  151.      DevicePolicyManagerService devicePolicy = null ;  
  152.      StatusBarManagerService statusBar = null ;  
  153.      InputMethodManagerService imm = null ;  
  154.      AppWidgetService appWidget = null ;  
  155.      NotificationManagerService notification = null ;  
  156.      WallpaperManagerService wallpaper = null ;  
  157.      LocationManagerService location = null ;  
  158.   
  159.      if  (factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {  
  160.          try  {  
  161.              Slog.i(TAG, "Device Policy" );  
  162.              devicePolicy = new  DevicePolicyManagerService(context);  
  163.              ServiceManager.addService(Context.DEVICE_POLICY_SERVICE, devicePolicy);  
  164.          } catch  (Throwable e) {  
  165.              Slog.e(TAG, "Failure starting DevicePolicyService" , e);  
  166.          }  
  167.   
  168.          try  {  
  169.              Slog.i(TAG, "Status Bar" );  
  170.              statusBar = new  StatusBarManagerService(context);  
  171.              ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);  
  172.          } catch  (Throwable e) {  
  173.              Slog.e(TAG, "Failure starting StatusBarManagerService" , e);  
  174.          }  
  175.   
  176.          try  {  
  177.              Slog.i(TAG, "Clipboard Service" );  
  178.              ServiceManager.addService(Context.CLIPBOARD_SERVICE,  
  179.                      new  ClipboardService(context));  
  180.          } catch  (Throwable e) {  
  181.              Slog.e(TAG, "Failure starting Clipboard Service" , e);  
  182.          }  
  183.   
  184.          try  {  
  185.              Slog.i(TAG, "Input Method Service" );  
  186.              imm = new  InputMethodManagerService(context, statusBar);  
  187.              ServiceManager.addService(Context.INPUT_METHOD_SERVICE, imm);  
  188.          } catch  (Throwable e) {  
  189.              Slog.e(TAG, "Failure starting Input Manager Service" , e);  
  190.          }  
  191.   
  192.          try  {  
  193.              Slog.i(TAG, "NetStat Service" );  
  194.              ServiceManager.addService("netstat" ,  new  NetStatService(context));  
  195.          } catch  (Throwable e) {  
  196.              Slog.e(TAG, "Failure starting NetStat Service" , e);  
  197.          }  
  198.   
  199.          try  {  
  200.              Slog.i(TAG, "NetworkManagement Service" );  
  201.              ServiceManager.addService(  
  202.                      Context.NETWORKMANAGEMENT_SERVICE,  
  203.                      NetworkManagementService.create(context));  
  204.          } catch  (Throwable e) {  
  205.              Slog.e(TAG, "Failure starting NetworkManagement Service" , e);  
  206.          }  
  207.   
  208.          try  {  
  209.              Slog.i(TAG, "Connectivity Service" );  
  210.              connectivity = ConnectivityService.getInstance(context);  
  211.              ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);  
  212.          } catch  (Throwable e) {  
  213.              Slog.e(TAG, "Failure starting Connectivity Service" , e);  
  214.          }  
  215.   
  216.          try  {  
  217.              Slog.i(TAG, "Throttle Service" );  
  218.              throttle = new  ThrottleService(context);  
  219.              ServiceManager.addService(  
  220.                      Context.THROTTLE_SERVICE, throttle);  
  221.          } catch  (Throwable e) {  
  222.              Slog.e(TAG, "Failure starting ThrottleService" , e);  
  223.          }  
  224.   
  225.          try  {  
  226.            Slog.i(TAG, "Accessibility Manager" );  
  227.            ServiceManager.addService(Context.ACCESSIBILITY_SERVICE,  
  228.                    new  AccessibilityManagerService(context));  
  229.          } catch  (Throwable e) {  
  230.            Slog.e(TAG, "Failure starting Accessibility Manager" , e);  
  231.          }  
  232.   
  233.          try  {  
  234.              /*  
  235.               * NotificationManagerService is dependant on MountService,  
  236.               * (for media / usb notifications) so we must start MountService first.  
  237.               */   
  238.              Slog.i(TAG, "Mount Service" );  
  239.              ServiceManager.addService("mount" ,  new  MountService(context));  
  240.          } catch  (Throwable e) {  
  241.              Slog.e(TAG, "Failure starting Mount Service" , e);  
  242.          }  
  243.   
  244.          try  {  
  245.              Slog.i(TAG, "Notification Manager" );  
  246.              notification = new  NotificationManagerService(context, statusBar, lights);  
  247.              ServiceManager.addService(Context.NOTIFICATION_SERVICE, notification);  
  248.          } catch  (Throwable e) {  
  249.              Slog.e(TAG, "Failure starting Notification Manager" , e);  
  250.          }  
  251.   
  252.          try  {  
  253.              Slog.i(TAG, "Device Storage Monitor" );  
  254.              ServiceManager.addService(DeviceStorageMonitorService.SERVICE,  
  255.                      new  DeviceStorageMonitorService(context));  
  256.          } catch  (Throwable e) {  
  257.              Slog.e(TAG, "Failure starting DeviceStorageMonitor service" , e);  
  258.          }  
  259.   
  260.          try  {  
  261.              Slog.i(TAG, "Location Manager" );  
  262.              location = new  LocationManagerService(context);  
  263.              ServiceManager.addService(Context.LOCATION_SERVICE, location);  
  264.          } catch  (Throwable e) {  
  265.              Slog.e(TAG, "Failure starting Location Manager" , e);  
  266.          }  
  267.   
  268.          try  {  
  269.              Slog.i(TAG, "Search Service" );  
  270.              ServiceManager.addService(Context.SEARCH_SERVICE,  
  271.                      new  SearchManagerService(context));  
  272.          } catch  (Throwable e) {  
  273.              Slog.e(TAG, "Failure starting Search Service" , e);  
  274.          }  
  275.   
  276.          if  (INCLUDE_DEMO) {  
  277.              Slog.i(TAG, "Installing demo data..." );  
  278.              (new  DemoThread(context)).start();  
  279.          }  
  280.   
  281.          try  {  
  282.              Slog.i(TAG, "DropBox Service" );  
  283.              ServiceManager.addService(Context.DROPBOX_SERVICE,  
  284.                      new  DropBoxManagerService(context,  new  File( "/data/system/dropbox" )));  
  285.          } catch  (Throwable e) {  
  286.              Slog.e(TAG, "Failure starting DropBoxManagerService" , e);  
  287.          }  
  288.   
  289.          try  {  
  290.              Slog.i(TAG, "Wallpaper Service" );  
  291.              wallpaper = new  WallpaperManagerService(context);  
  292.              ServiceManager.addService(Context.WALLPAPER_SERVICE, wallpaper);  
  293.          } catch  (Throwable e) {  
  294.              Slog.e(TAG, "Failure starting Wallpaper Service" , e);  
  295.          }  
  296.   
  297.          try  {  
  298.              Slog.i(TAG, "Audio Service" );  
  299.              ServiceManager.addService(Context.AUDIO_SERVICE, new  AudioService(context));  
  300.          } catch  (Throwable e) {  
  301.              Slog.e(TAG, "Failure starting Audio Service" , e);  
  302.          }  
  303.   
  304.          try  {  
  305.              Slog.i(TAG, "Headset Observer" );  
  306.              // Listen for wired headset changes   
  307.              headset = new  HeadsetObserver(context);  
  308.          } catch  (Throwable e) {  
  309.              Slog.e(TAG, "Failure starting HeadsetObserver" , e);  
  310.          }  
  311.   
  312.          try  {  
  313.              Slog.i(TAG, "Dock Observer" );  
  314.              // Listen for dock station changes   
  315.              dock = new  DockObserver(context, power);  
  316.          } catch  (Throwable e) {  
  317.              Slog.e(TAG, "Failure starting DockObserver" , e);  
  318.          }  
  319.   
  320.          try  {  
  321.              Slog.i(TAG, "USB Service" );  
  322.              // Listen for USB changes   
  323.              usb = new  UsbService(context);  
  324.              ServiceManager.addService(Context.USB_SERVICE, usb);  
  325.          } catch  (Throwable e) {  
  326.              Slog.e(TAG, "Failure starting UsbService" , e);  
  327.          }  
  328.   
  329.          try  {  
  330.              Slog.i(TAG, "UI Mode Manager Service" );  
  331.              // Listen for UI mode changes   
  332.              uiMode = new  UiModeManagerService(context);  
  333.          } catch  (Throwable e) {  
  334.              Slog.e(TAG, "Failure starting UiModeManagerService" , e);  
  335.          }  
  336.   
  337.          try  {  
  338.              Slog.i(TAG, "Backup Service" );  
  339.              ServiceManager.addService(Context.BACKUP_SERVICE,  
  340.                      new  BackupManagerService(context));  
  341.          } catch  (Throwable e) {  
  342.              Slog.e(TAG, "Failure starting Backup Service" , e);  
  343.          }  
  344.   
  345.          try  {  
  346.              Slog.i(TAG, "AppWidget Service" );  
  347.              appWidget = new  AppWidgetService(context);  
  348.              ServiceManager.addService(Context.APPWIDGET_SERVICE, appWidget);  
  349.          } catch  (Throwable e) {  
  350.              Slog.e(TAG, "Failure starting AppWidget Service" , e);  
  351.          }  
  352.   
  353.          try  {  
  354.              Slog.i(TAG, "Recognition Service" );  
  355.              recognition = new  RecognitionManagerService(context);  
  356.          } catch  (Throwable e) {  
  357.              Slog.e(TAG, "Failure starting Recognition Service" , e);  
  358.          }  
  359.            
  360.          try  {  
  361.              Slog.i(TAG, "DiskStats Service" );  
  362.              ServiceManager.addService("diskstats" ,  new  DiskStatsService(context));  
  363.          } catch  (Throwable e) {  
  364.              Slog.e(TAG, "Failure starting DiskStats Service" , e);  
  365.          }  
  366.      }  
  367.   
  368.      // make sure the ADB_ENABLED setting value matches the secure property value   
  369.      Settings.Secure.putInt(mContentResolver, Settings.Secure.ADB_ENABLED,  
  370.              "1" .equals(SystemProperties.get( "persist.service.adb.enable" )) ?  1  :  0);  
  371.   
  372.      // register observer to listen for settings changes   
  373.      mContentResolver.registerContentObserver(Settings.Secure.getUriFor(Settings.Secure.ADB_ENABLED),  
  374.              false ,  new  AdbSettingsObserver());  
  375.   
  376.      // Before things start rolling, be sure we have decided whether   
  377.      // we are in safe mode.   
  378.      final   boolean  safeMode = wm.detectSafeMode();  
  379.      if  (safeMode) {  
  380.          try  {  
  381.              ActivityManagerNative.getDefault().enterSafeMode();  
  382.              // Post the safe mode state in the Zygote class   
  383.              Zygote.systemInSafeMode = true ;  
  384.              // Disable the JIT for the system_server process   
  385.              VMRuntime.getRuntime().disableJitCompilation();  
  386.          } catch  (RemoteException e) {  
  387.          }  
  388.      } else  {  
  389.          // Enable the JIT for the system_server process   
  390.          VMRuntime.getRuntime().startJitCompilation();  
  391.      }  
  392.   
  393.      // It is now time to start up the app processes...   
  394.   
  395.      if  (devicePolicy !=  null ) {  
  396.          devicePolicy.systemReady();  
  397.      }  
  398.   
  399.      if  (notification !=  null ) {  
  400.          notification.systemReady();  
  401.      }  
  402.   
  403.      if  (statusBar !=  null ) {  
  404.          statusBar.systemReady();  
  405.      }  
  406.      wm.systemReady();  
  407.      power.systemReady();  
  408.      try  {  
  409.          pm.systemReady();  
  410.      } catch  (RemoteException e) {  
  411.      }  
  412.   
  413.      // These are needed to propagate to the runnable below.   
  414.      final  StatusBarManagerService statusBarF = statusBar;  
  415.      final  BatteryService batteryF = battery;  
  416.      final  ConnectivityService connectivityF = connectivity;  
  417.      final  DockObserver dockF = dock;  
  418.      final  UsbService usbF = usb;  
  419.      final  ThrottleService throttleF = throttle;  
  420.      final  UiModeManagerService uiModeF = uiMode;  
  421.      final  AppWidgetService appWidgetF = appWidget;  
  422.      final  WallpaperManagerService wallpaperF = wallpaper;  
  423.      final  InputMethodManagerService immF = imm;  
  424.      final  RecognitionManagerService recognitionF = recognition;  
  425.      final  LocationManagerService locationF = location;  
  426.   
  427.      // We now tell the activity manager it is okay to run third party   
  428.      // code.  It will call back into us once it has gotten to the state   
  429.      // where third party code can really run (but before it has actually   
  430.      // started launching the initial applications), for us to complete our   
  431.      // initialization.   
  432.      ((ActivityManagerService)ActivityManagerNative.getDefault())  
  433.              .systemReady(new  Runnable() {  
  434.          public   void  run() {  
  435.              Slog.i(TAG, "Making services ready" );  
  436.   
  437.              if  (statusBarF !=  null ) statusBarF.systemReady2();  
  438.              if  (batteryF !=  null ) batteryF.systemReady();  
  439.              if  (connectivityF !=  null ) connectivityF.systemReady();  
  440.              if  (dockF !=  null ) dockF.systemReady();  
  441.              if  (usbF !=  null ) usbF.systemReady();  
  442.              if  (uiModeF !=  null ) uiModeF.systemReady();  
  443.              if  (recognitionF !=  null ) recognitionF.systemReady();  
  444.              Watchdog.getInstance().start();  
  445.   
  446.              // It is now okay to let the various system services start their   
  447.              // third party code...   
  448.   
  449.              if  (appWidgetF !=  null ) appWidgetF.systemReady(safeMode);  
  450.              if  (wallpaperF !=  null ) wallpaperF.systemReady();  
  451.              if  (immF !=  null ) immF.systemReady();  
  452.              if  (locationF !=  null ) locationF.systemReady();  
  453.              if  (throttleF !=  null ) throttleF.systemReady();  
  454.          }  
  455.      });  
  456.   
  457.      // For debug builds, log event loop stalls to dropbox for analysis.   
  458.      if  (StrictMode.conditionallyEnableDebugLogging()) {  
  459.          Slog.i(TAG, "Enabled StrictMode for system server main thread." );  
  460.      }  
  461.   
  462.      Looper.loop();  
  463.      Slog.d(TAG, "System ServerThread is exiting!" );  
  464.  }  

这里启动的每一个进程都作为一个Dalvik线程而存在于SystemServer进程里面。




 

原文地址:https://www.cnblogs.com/lechance/p/4373166.html