type
status
date
slug
summary
tags
category
icon
password
app_process64在启动zygote进程的时候,会从zygote进程fork出system_server进程.
system_server的入口在SystemServer.java中
SystemServer
从上面的代码可以看出来,system_server主要做了下面这些事:
- 加载libandroid_servers.so
- 创建系统Context
- 创建SystemServiceManager,并添加到LocalServices中
- 依次启动启动服务,核心服务,和一些其他服务
- 在当前线程开启Looper机制
加载libandroid_servers.so
查看
frameworks/base/services/Android.bp
:可知
libservices.core
中的所有内容会链接到libandroid_servers中,而 libservices.core
在frameworks/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相关的内容可以参考:
- 作者:姜康
- 链接:https://jiangkang.tech/article/5aed9381-c372-43f6-b836-c1d973a2b579
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章