Android Framework--启动流程

Android启动流程

boot引导启动–>kernel启动–>Android核心启动(init–>runtime->zygote–>system_server)

boot引导启动

这里写图片描述

kernel启动

这里写图片描述

init

init代码位于system/core/init目录下,编译后打包进ramdisk中,最后一并打包到boot.img中。
init主要有两个过程:init.main中执行基本的初始化和配置;解析并运行init.rc,启动本地的守护进程
这里写图片描述

runtime->zygote->systemserver

始于App_main.cpp的main函数
runtime的主要工作是startVM启动虚拟机,注册JNI
zygote的主要工作是加载各种资源(预加载类/系统资源/openGL/字体/全局so等),最后zygote进程进入循环等待,负责fork新进程
system_server的主要工作是启动各种服务,其中在AMS.systemReady里启动Launcher

system_server中分init1和init2两个阶段,第一阶段主要负责初始化还有SurfaceFlinger/SensorService/Binder等系统的启动。第二阶段会启一个ServerThread线程来负责启动各种服务(可分为七大类)
第一类:Android核心服务;AMS,WMS等
第二类:通信相关服务;Wifi,Telephone等
第三类:系统功能相关服务;AudioService,MountService,UsbService等
第四类:BatteryService,VibratorService等服务
第五类:EntropyService,DiskStatsService,Watchdog等独立的服务
第六类:蓝牙服务
第七类:UI相关服务。状态栏服务,通知栏服务等

最后附一张较为详细的流程图(始于App_main.cpp#main;亿图打开)

猜你喜欢

转载自blog.csdn.net/xiaoru5127/article/details/76585007