天天看點

Android systemserver 解析

System Server是Android系統的核心,他在Dalvik虛拟機啟動後立即開始初始化和運作。其它的系統服務在System Server程序的環境中運作。/base/services/java/com/android/server/SystemServer.java

Java代碼  

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

 在main函數中,首先檢查系統時間設定和SamplingProfiler。然後加載一個叫android_servers的本地庫,他提供本 地方法的接口(源程式在framework/base/services/jni/目錄中)。然後調用本地方法設定服務。具體執行設定的代碼在 frameworks/base/cmds/system_server/library/system_init.cpp中。

C代碼  

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

 等初始化傳感器,視訊,音頻等服務後,調用一個回調方法init2 (在SystemServer.java中)。在上面的代碼可以看到,這個方法開啟了ServerThread來初始化其它的服務。

Java代碼  

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

這裡啟動的沒一個程序都作為一個Dalvik線程而存在于SystemServer程序裡面。

Android systemserver 解析
Android systemserver 解析
Android systemserver 解析