天天看點

Android的System Server

http://www.cnblogs.com/armlinux/archive/2012/01/12/2396769.html

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

Java代碼

Android的System Server
Android的System Server
Android的System Server
  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的System Server
Android的System Server
Android的System Server
  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的System Server
Android的System Server
Android的System Server
  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的System Server
Android的System Server
Android的System Server