SystemServer概述

SystemServer由Zygote fork生成的,进程名为system_server,该进程承载着framework的核心服务.java

调用流程以下:linux

上图前4步骤(即颜色为紫色的流程)运行在是Zygote进程,从第5步(即颜色为蓝色的流程)ZygoteInit.handleSystemServerProcess开始是运行在新建立的system_server,这是fork机制实现的(fork会返回2次)。安全

1.startSystemServer

 准备参数并fork新进程,从上面能够看出system server进程参数信息为uid=1000,gid=1000,进程名为sytem_server,从zygote进程fork新进程后,须要关闭zygote原有的socket。另外,对于有两个zygote进程状况,需等待第2个zygote建立完成。app

2.forkSystemServer

调用nativeForkSystemServer()方法fork system_server进程socket

3.nativeForkSystemServer

当system_server进程建立失败时,将会重启zygote进程。这里须要注意,对于Android 5.0以上系统,有两个zygote进程,分别是zygote、zygote64两个进程,system_server的父进程,通常来讲64位系统其父进程是zygote64进程oop

  1. 当kill system_server进程后,只重启zygote64和system_server,不重启zygote;
  2. 当kill zygote64进程后,只重启zygote64和system_server,也不重启zygote;
  3. 当kill zygote进程,则重启zygote、zygote64以及system_server。

4.ForkAndSpecializeCommon

fork()建立新进程,采用copy on write方式,这是linux建立进程的标准方法,会有两次return,对于pid==0为子进程的返回,对于pid>0为父进程的返回。优化

5.handleSystemServerProcess

关闭父进程zygote复制而来的Socket,设置当前进程名为"system_server",执行dex优化操做,启动应用进程ui

6.performSystemServerDexOpt

将classPath字符串中的apk,分别进行dex优化操做。真正执行优化工做经过socket通讯将相应的命令参数,发送给installd来完成。spa

7.zygoteInit-->commonInit-->nativeZygoteInit--> applicationInit-->invokeStaticMain-->MethodAndArgsCaller.run()-->SystemServer.main()

在RuntimeInit.java中invokeStaticMain方法经过建立并抛出异常ZygoteInit.MethodAndArgsCaller,在ZygoteInit.java中的main()方法会捕捉该异常,并调用caller.run(),再经过反射便会调用到SystemServer.main()方法线程

 

通过上面7个步骤已经进入SystemServer.main()方法。

SystemServer启动流程

1.SystemServer.main

先初始化SystemServer对象,再调用对象的run()方法

2. SystemServer.run

LocalServices经过用静态Map变量sLocalServiceObjects,来保存以服务类名为key,以具体服务对象为value的Map结构。

2.1 performPendingShutdown

当"sys.shutdown.requested"值不为空,则会重启或者关机

2.2 createSystemContext

该过程会建立对象有ActivityThread,Instrumentation, ContextImpl,LoadedApk,Application。

2.3 startBootstrapServices

该方法所建立的服务:ActivityManagerService, PowerManagerService, LightsService, DisplayManagerService, PackageManagerService, UserManagerService, sensor服务.

2.4 startCoreServices

启动服务BatteryService,UsageStatsService,WebViewUpdateService

2.5 startOtherServices

启动剩余服务,最后调用AMS.systemReady().

到此, System_server主线程的启动工做总算完成, 进入Looper.loop()状态,等待其余线程经过handler发送消息到主线再处理.

2、服务启动阶段

SystemServiceManager的startBootPhase()贯穿system_server进程的整个启动过程:

其中PHASE_BOOT_COMPLETED=1000,该阶段是发生在Boot完成和home应用启动完毕。系统服务更倾向于监听该阶段,而不是注册广播ACTION_BOOT_COMPLETED,从而下降系统延迟。

各个启动阶段所在源码的大体位置:

public final class SystemServer {

    private void startBootstrapServices() {
      ...
      //phase100
      mSystemServiceManager.startBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY);
      ...
    }

    private void startCoreServices() {
      ...
    }

    private void startOtherServices() {
      ...
      //phase480 && 500
      mSystemServiceManager.startBootPhase(SystemService.PHASE_LOCK_SETTINGS_READY);
      mSystemServiceManager.startBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
      
      ...
      mActivityManagerService.systemReady(new Runnable() {
         public void run() {
             //phase550
             mSystemServiceManager.startBootPhase(
                     SystemService.PHASE_ACTIVITY_MANAGER_READY);
             ...
             //phase600
             mSystemServiceManager.startBootPhase(
                     SystemService.PHASE_THIRD_PARTY_APPS_CAN_START);
          }
      }
    }
}

 

接下来再说说简单每一个阶段的大概完成的工做:

2.1 Phase0

建立四大引导服务:

  • ActivityManagerService
  • PowerManagerService
  • LightsService
  • DisplayManagerService

2.2 Phase100

进入阶段PHASE_WAIT_FOR_DEFAULT_DISPLAY=100回调服务

onBootPhase(100)

  • DisplayManagerService

而后建立大量服务下面列举部分:

  • PackageManagerService
  • WindowManagerService
  • InputManagerService
  • NetworkManagerService
  • DropBoxManagerService
  • FingerprintService
  • LauncherAppsService

2.3 Phase480

进入阶段PHASE_LOCK_SETTINGS_READY=480回调服务

onBootPhase(480)

  • DevicePolicyManagerService

阶段480后立刻就进入阶段500.

2.4 Phase500

PHASE_SYSTEM_SERVICES_READY=500,进入该阶段服务能安全地调用核心系统服务.

onBootPhase(500)

  • AlarmManagerService
  • JobSchedulerService
  • NotificationManagerService
  • BackupManagerService
  • UsageStatsService
  • DeviceIdleController
  • TrustManagerService
  • UiModeManagerService

  • BluetoothService
  • BluetoothManagerService
  • EthernetService
  • WifiP2pService
  • WifiScanningService
  • WifiService
  • RttService

各大服务执行systemReady():

  • WindowManagerService.systemReady():
  • PowerManagerService.systemReady():
  • PackageManagerService.systemReady():
  • DisplayManagerService.systemReady():

接下来就绪AMS.systemReady方法.

2.5 Phase550

PHASE_ACTIVITY_MANAGER_READY=550, AMS.mSystemReady=true, 已准备就绪,进入该阶段服务能广播Intent;可是system_server主线程并无就绪.

onBootPhase(550)

  • MountService
  • TelecomLoaderService
  • UsbService
  • WebViewUpdateService
  • DockObserver
  • BatteryService

接下来执行: (AMS启动native crash监控, 加载WebView,启动SystemUi等),以下

  • mActivityManagerService.startObservingNativeCrashes();
  • WebViewFactory.prepareWebViewInSystemServer();
  • startSystemUi(context);

  • networkScoreF.systemReady();
  • networkManagementF.systemReady();
  • networkStatsF.systemReady();
  • networkPolicyF.systemReady();
  • connectivityF.systemReady();
  • audioServiceF.systemReady();
  • Watchdog.getInstance().start();

2.6 Phase600

PHASE_THIRD_PARTY_APPS_CAN_START=600

onBootPhase(600)

  • JobSchedulerService
  • NotificationManagerService
  • BackupManagerService
  • AppWidgetService
  • GestureLauncherService
  • DreamManagerService
  • TrustManagerService
  • VoiceInteractionManagerService

接下来,各类服务的systemRunning过程:

WallpaperManagerService、InputMethodManagerService、LocationManagerService、CountryDetectorService、NetworkTimeUpdateService、CommonTimeManagementService、TextServicesManagerService、AssetAtlasService、InputManagerService、TelephonyRegistry、MediaRouterService、MmsServiceBroker这些服务依次执行其systemRunning()方法。

2.7 Phase1000

在通过一系列流程,再调用AMS.finishBooting()时,则进入阶段Phase1000

到此,系统服务启动阶段完成就绪,system_server进程启动完成则进入Looper.loop()状态,随时待命,等待消息队列MessageQueue中的消息到来,则立刻进入执行状态。

3、服务类别

system_server进程,从源码角度划分为引导服务、核心服务、其余服务3类。 

  1. 引导服务(7个):ActivityManagerService、PowerManagerService、LightsService、DisplayManagerService、PackageManagerService、UserManagerService、SensorService;
  2. 核心服务(3个):BatteryService、UsageStatsService、WebViewUpdateService;
  3. 其余服务(70个+):AlarmManagerService、VibratorService等。

合计总大约80个系统服务:

 

相关文章
相关标签/搜索