type
status
date
slug
summary
tags
category
icon
password
app_process64在启动zygote进程的时候,会从zygote进程fork出system_server进程.
system_server的入口在SystemServer.java中

SystemServer

从上面的代码可以看出来,system_server主要做了下面这些事:
  1. 加载libandroid_servers.so
  1. 创建系统Context
  1. 创建SystemServiceManager,并添加到LocalServices中
  1. 依次启动启动服务,核心服务,和一些其他服务
  1. 在当前线程开启Looper机制

加载libandroid_servers.so

查看frameworks/base/services/Android.bp:
可知libservices.core中的所有内容会链接到libandroid_servers中,而 libservices.coreframeworks/base/services/core/jni/下多个JNI文件:
因此,这个so其实包含了frameworks/base/services/core/jni/下的内容.并且依赖了一些基础的so文件.

创建SystemContext 和SystemUiContext

笼统的说,这个方法主要就是为了创建SystemContext和SystemUiContext. SystemContext和SystemUiContext都是ContextImpl对象,并且都是单例. 这里创建的SystemContext与SystemUiContext共享相同的LoadedApk,即context中的packageInfo.
这里创建ActivityThread的时候,会判断机型,如果是低端机,就禁止使用Thread Renderer:
attach的过程如下:
ActiviyThread的主要作用是:
  • 管理应用进程的主线程执行
  • 调度,执行activity,broadcast和其他操作
attach的这个操作会创建一个AppContext(其实也是ContextImpl对象),并通过LoadedApk创建一个默认的Application(android.app.Application).

创建SystemServiceManager

创建SystemServiceManager,然后将其添加到一个Map中,后续统一处理.

启动各种服务

分成三类服务:
  • BootStrap
  • Core
  • Other
所有服务均是SystemService的实现类,通过SystemServiceManager启动服务的时候,会调用service的onStart()方法启动服务.

Bootstrap Service

  • WatchDog 其实就是一个Thread对象,当启动过程中发生死锁,可以使system_server崩溃
  • Installer 使用之前创建的SystemServiceManager对象启动Installer Service. Installer service在启动的时候会通过Binder机制请求installd(一个守护进程,用于安装apk)
  • DeviceIdentifiersPolicyService 定义访问设备标识符的策略
  • UriGrantsManagerService.LifeCyle 管理Uri授权
  • ActivityTaskManagerService.Lifecycle 管理Activity和Activity的容器,比如task, stacks, displays等
  • ActivityManagerService
  • PowerManagerService
  • ThermalManagerService
  • RecoverySystemService
  • LightsService
  • SidekickService
  • DisplayManagerService
  • UserManagerService
  • OverlayManagerService
  • SensorPrivacyService

Core Service

  • BatteryService
  • UsageStatsService
  • WebViewUpdateService
  • CachedDeviceStateService
  • BinderCallsStatsService.LifeCycle
  • RollbackManagerService
  • BugreportManagerService
  • GpuService

Other Service

  • VibratorService
  • DynamicSystemService
  • NetworkManagementService
  • IpSecService
  • NetworkStatsService
  • NetworkPolicyManagerService
  • ConnectivityService
  • NsdService
  • WindowManagerService
  • SerialService
  • NetworkTimeUpdateService
  • InputManagerService
  • ConsumerIrService
  • HardwarePropertiesManagerService
  • UiModeManagerService
  • ContentCaptureService
  • AttentionService
  • SystemCaptionsManagerService
  • AdbService
  • PermissionPolicyService ...
在启动Other类服务的最后阶段会执行mActivityManagerService.systemReady() 这个方法中会执行一些方法的systemReady方法,并启动System UI.

启动System UI

有关System UI相关的内容可以参考:
Android系统启动流程-Zygote分析Android系统启动流程-Native方法的注册
Loading...