您的位置:首页 > 移动开发 > Android开发

Android Framework--启动流程

2017-08-02 16:42 375 查看

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;亿图打开)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息