一,安卓设备启动三阶段
Bootloader LinuxKernel 和Android系统服务·
二,第一个系统进程init PID是0
三,陆续启动其他关键性的服务进程 ServieManager Zygote SystemServer
四,ServiceManager的启动
crical选项说明是系统关键进程,该进程四分钟内异常退出,则设备重启进入还原模式
,Zygote、media、Surfaceflinger等也会被重启
五,Zygote
程序名:app_process64
源码路径:/frameworks/base/cmds/app_process
app_process主函数文件:/frameworks/base/cmds/app_process/App_main.cpp
1,主函数:main 主要解析app_process传入的参数
2,start 启动ZygoteInit
3,启动虚拟机
frameworks/base/core/jni/AndroidRuntime.cpp startVm
4,虚拟机启动后回调 onVmCreate
5,执行zygoteInit
/frameworks/base/core/java/com/android/internal/ZygoteInit.java
6,注册Socket 接收通知孵化进程
7,预加载各类资源
8,启动SystemServer
9,forkSystemServer 孵化SystemServer进程
10.runSelectLoop 死循环 zygote的守护体
11.runOnce 客户端数据处理,创建承载应用的新进程,父进程扫尾工作
12,forkAndSpecialize >> nativeForkAndSpecialize >> fork 孵化新进程
13,callStaticVoidMedthod
14,handleChildProc 找到并执行目标进程的入口函数
15,执行 ActivityManagerService的startProcessLocked函数
16,Runtime.zygoteInit
通用部分初始化CommonInit 本地初始化函数 nativeZygoteInit applicatonInit负责java层服务的启动