Android:开机流程

流程顺序:

开机 -> BootLoader(引导芯片) -> Linux Kernel -> init进程 -> JVM和SystemServer等 -> Binder线程池 和 SystemServerManager -> Launcher 

思维导图:

口述表达:

整个的开机流程,分为两个阶段,第一阶段为Linux的启动过程,第二个阶段为android的启动流程。

Linux的启动过程:

1)首先是用户点击开机键,芯片开始执行ROM中的预存代码

2)然后引导程序(BootLoader)将操作系统映像文件拷贝到RAM中去,引导程序开始初始化硬件参数,然后启动操作系统。

3)接着引导程序会初始化Kernel,加载内核到内存中。

4)start_kernel会最终启动用户空间的init进程。

Android的启动过程:

5)当初始化内核之后,就会启动一个相当重要的祖先进程,也就是init进程,在Linux中所有的进程都是由init进程直接或间接fork出来的。init进程负责创建系统中最关键的几个核心daemon(守护)进程,尤其是zygote和servicemanager。前者是android启动的第一个dalvik 虚拟机,它将负责启动Java世界的进程;后者是BInder通信的基础。换句话说, init进程负责解析init.rc配置文件,开启系统守护进程。两个最重要的守护进程是zygote进程和servicemanager

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

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

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

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值