Android启动过程

1、Linux启动过程:

1)首先用户点击开机键,引导芯片执行Rom中的预存代码,然后加载引导程序到Ram中(操作系统映像文件拷贝)。

2)引导程序启动后,开始初始化硬件参数,然后启动操作系统。

3)紧接着引导程序会初始化Kernel,加载内核到内存中,然后(start_kernel)启动用户空间的init进程。

2、Android启动过程:

4)在Linux中所有的进程都是由init进程直接或间接fork出来的,init进程负责创建系统中最关键的几个核心daemon(守护进程),
尤其是zygote进程(Android启动的第一个Dalvik虚拟机)和servicemanager(系统服务管理,Binder通信基础)。换句话说,init进程
负责init.rc配置文件,开启系统守护进程。两个重要的守护进程是zygote进程和servicemanager进程。

5)Zygote进程是所有Java进程的父进程。在zygote开启的时候,会调用ZygoteInit.main()
进行初始化。zygote虚拟机启动子进程system_server,同时也可以看出zygote中定义了一个Socket,用于接收ActivityManagerService启动
应用程序的请求。前面ZygoteInit.java里面通过startSystemServer() fork出了SystemServer进程,这个进程在整个的Android中非常重要,
它和Zygote进程一样,是Android Framework层的两大重要进程。系统里面重要的服务都是在这个进程里面开启的,例如AMS, WMS, 
PackageManagerService等等都是由这个SystemServer fork出来的。

6)在SystemServer进程开启的时候,就会初始化ActivityManagerService 。同时,会加载本地系统的服务库,调用createSystemContext()
创建系统上下文,创建ActivityThread及开启各种服务等等。也就是说在system_server中开启了核心系统服务,并将系统服务添加到ServiceManager中,
然后系统进入SystemReady状态。

7)上面AMS 开启之后,会调用finishBooting() ,完成引导过程,同时发送开机广播。AMS会与zygote的Socket通信,请求启动Home。zygote收到AMS的
连接请求后,zygote处理请求会通过fork启动新的应用进程,并最终启动Home,完成系统界面的加载与显示。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值