Pie_system_server
2021-11-23 22:14:18 0 举报
Android9.0 system_server进程启动流程和主要功能调用
作者其他创作
大纲/内容
findStaticMain()
SystemService
反射机制获取该服务的类类型
startService(final SystemService service)
PHASE_WAIT_FOR_DEFAULT_DISPLAY = 100
启动Installer、DIPS、PMS、RSS、LS、DMS
管理一个个SystemService实例
servicemanager
return new MethodAndArgsCaller()
binder通信
RuntimeInit.commonInit()
LightsService
startService(String className)
pie/framework/native/cmds/servicemanager
fork()
0
PHASE_DEVICE_SPECIFIC_SERVICES_READY = 520
ZygoteInit.zygoteInit()
String[] args = ……
fork动作
Runnable r = forkSystemServer()
PHASE_ACTIVITY_MANAGER_READY = 550
SystemServer.run()主线程
ZygoteInit.nativeZygoteInit()
调用WMS、AMS、PKMS、DMS的systemReady()
PHASE_LOCK_SETTINGS_READY = 480
pie\\frameworks\\base\\services\\core\\java\\com\\android\\server\\SystemService.java
AMS.Lifecycle
ForkCommon()
com_android_internal_os_Zygote_nativeForkSystemServer()
publishBinderService()
pie\\frameworks\\base\\core\\java\\com\\android\\internal\\os\\RuntimeInit.java
r.run()
SystemServer
期间无操作
startSystemUi(),调用其他服务的systemReady()启动Watchdog
pie\\frameworks\\base\\core\\java\\android\\os\\ServiceManager.java
反射机制创建该类实例
SystemServiceManager
调用服务实例的onStart()方法
PHASE_BOOT_COMPLETED = 1000
pie\\frameworks\\base\\services\\core\\java\\com\\android\\server\\SystemServiceManager.java
umask()
用于services启动的不同阶段执行不同任务
Pie\\trunk\\code\\pie\\frameworks\\base\\services\\java\\com\\android\\server\\SystemServer.java
main()封装到Runnable
pie\\frameworks\\base\\core\\java\\com\\android\\internal\\os\\ZygoteArguments.java
参数准备
parseArgs()
new ZygoteArguments()
getOrCreateSystemServerClassLoader()
ServiceManager
addService()
ZygoteArguments.getInstance()
abstract onStart()
Process.setArgV0()
创建binder线程
PMS
用于启动服务自身
…………
反射机制寻找main方法
设置log、时区、http代理格式
执行SystemServer类的main()方法
扫尾工作
PHASE_THIRD_PARTY_APPS_CAN_START = 600
RuntimeInit.redirectLogStreams()
创建java类加载器
system_server进程创建完成
实 例
nativeForkSystemServer()
服务 注册
Zygote.forkSystemServer()
继 承
参数解析
RecoverySystemService
设置新fork的进程权限
pie\\frameworks\\base\\core\\java\\com\\android\\internal\\os\\ZygoteInit.java
设置进程名为system_server
pie\\frameworks\\base\\jni\\com_android_internal_os_Zygote.cpp
调用各种服务的systemRunning()AMS在finishBooting()方法中进入使PHASE=1000
RuntimeInit.applicationInit()
PHASE_SYSTEM_SERVICES_READY = 500
将java输出流重定向到android
handleSystemServerProcess()
启动PKMS、WMS、NMS等众多服务
startService(Class<T> serviceClass)
onBootPhase()
0 条评论
下一页