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

步骤一:系统加电,执行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 杨云君

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值