Android 正常模式的简单启动流程

2019-04-14 17:33发布

步骤一:系统加电,执行bootloader,bootloader负责初始化软件运行需要的最小硬件环境。bootloader依赖于硬件的体系结构,不同厂商有不同的bootloader程序 步骤二:进入内核引导阶段,检查内核与当前硬件是否匹配,进去内核启动阶段,完成一些C部分的初始化,最后开启init进程 步骤三:init进程执行:
1.初始化文件系统和日志系统
2.解析init.rc文件
3.触发需要执行的Action和Service
4.init循环监听处理事件, 在init.rc中,定义了Daemon Service:zygote,不同于其他的Daemon Service,zygote是由java语言编写的,不能由init通过fork子进程的方式启动,需要通过app_process完成加载工作,通过AppRuntime类的start方法完成 start方法
第一步:创建Dalvik虚拟机
第二步:注册JNI函数
第三步:调用ZygoteInit的main方法,开启java世界 main方法主要做了五部分工作:
1.注册zygote的Socket,可与ActivityManagerService通信
2.预加载Class资源和Resource资源
3.zygote第一分裂,forkSystemServer出System_server进程,所有系统服务都由该进程启动
4.执行MethodAndArgsCaller的run方法
5.startSystemServer成功后,执行runSelectLoopMode方法,进入无线循环,监听客户端的请求
步骤四:启动system_server,添加Android核心系统服务,添加到ServiceManager,进入SystemReady
SystemServer的main函数主要做了以下工作:
1)申请更多内存
2)加载android_servers库
3)执行init1,启动Native System Service
4)执行init2,启动ServerThread线程,启动大量核心系统服务:PackageManagerService,ActivityManagerService,WindowManagerService等
5)初始化Binder通信 步骤五:启动home
ActivityManagerService 调用systemReady()的过程中启动home 参考资料:Android的设计与实现卷I 杨云君