读书笔记 深入理解安卓内核设计思想 ---Android启动过程

时间:2024-04-05 20:53:25

 

一,安卓设备启动三阶段

   Bootloader   LinuxKernel 和Android系统服务·

二,第一个系统进程init PID是0

三,陆续启动其他关键性的服务进程 ServieManager Zygote SystemServer

四,ServiceManager的启动

读书笔记 深入理解安卓内核设计思想 ---Android启动过程

crical选项说明是系统关键进程,该进程四分钟内异常退出,则设备重启进入还原模式

,Zygote、media、Surfaceflinger等也会被重启

五,Zygote

读书笔记 深入理解安卓内核设计思想 ---Android启动过程

程序名: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层服务的启动

 

读书笔记 深入理解安卓内核设计思想 ---Android启动过程