Android 系统启动流程

Android系统是基于Linux定制的一款开源的而移动端操作系统,由于其开源的特性,各大手机厂商可以针对其源码进行深度定制,对于开发者来说,有如此庞大且优秀的开源os提供参考,尤其是对移动端的开发者来说,阅读Android系统源码可以帮助我们更好地理解其中的各种机制,平时束手无策的问题也可以在源码中寻找答案。当然光8.0的源码就20多个g,像全部读完几乎是不可能的事,我们主要以framework为主线,以系统运行机制为分支,层层阅读,剥开Android系统的神秘面纱。

Android 系统架构

首先来一张google经典的Android系统架构图:可以看到,从上到下主要分为4层:应用层,framework层,系统库和运行时,Linux内核层。
这里写图片描述

#Android 启动流程
这里再上一张Android系统启动的流程图,可以看到系统从启动开始是按照一个流程:Loader->kernel->framework->Application来进行的。
这里写图片描述

Loader层:

  • Boot Rom:当手机处于关机状态时,长按开机键开机,会引导芯片开始从固化在Rom里预设的代码开始执行,然后加载引导程序到Ram
  • Boot Loader:启动Android系统之前的引导程序,主要是检查Ram,初始化参数等

Kernel层

Kernel层指的就是Android内核层,这里一般开机刚刚结束进入Android系统,Kernel层的启动流程如下:

  1. 启动swapper进程(pid=0),这是系统初始化过程kernel创建的第一个进程,用于初始化进程管理、内存管理、加载DisplayCameraBinder等驱动相关工作
  2. 启动kthreadd进程,这是Linux系统的内核进程,会创建内核工作线程kworkder、软中断线程ksoftirqdthermal等内核守护进程。kthreadd是所有内核进程的鼻祖。

Native层

这里的native层主要包括由init进程孵化的用户空间的守护进程,bootanim开机动画和hal层等。InitLinux系统的守护进程,是所有用户空间进程的鼻祖。

  • init进程会孵化出ueventdlogdhealthdinstalldadbd、lm这里写代码片kd等用户守护进程;
  • init进程还会启动ServiceManager(Binder服务管家)、bootanim(开机动画)等重要服务。
  • init进程孵化出Zygote进程,Zygote进程是Android系统第一个Java进程(虚拟机进程),Zygote进程是所有Java进程的父进程。

Framework层

framework层有native层和java层共同组成,协调系统平稳有序的工作。framework 层主要包括以下内容:

  • Media Server进程,是由init进程fork而来,负责启动和管理整个C++ framework,包含AudioFlingerCamera Service等服务。
  • Zygote进程,由Init进程通过解析init.rc文件生成,Zygote是Android系统的第一个Java进程,是所有Java进程的父进程。
  • System Server进程,由Zygote进程fork而来,是Zygote进程孵化的第一个子进程,负责启动和管理整个Java Framework,包括AmsPms等。

App层

Zygote进程孵化的第一个App进程是Launcher进程,也就是我们的桌面进程,也就是我们打开手机看到的用户界面。因为在前面的framework 生成了各种守护进程和管理进程,对于Launcher也就有对应的点击、长按、滑动、卸载等监听。Zygote进程也会创建BrowserPhoneEmail等App进程。也就是说所有的App进程都是由Zygote进程fork生成的。而且上层的进程全部由下层的进程进行管理,包括但不限于界面的注册、跳转,消息的传递。

Zygote进程的启动

了解了Android系统从按下开机键到桌面完整运行在用户眼前的整个流程,我们就可以针对系统的各个过程进行分析。由于是移动开发,平时最多打交道的是应用层,也是就上面的App层,跟我们打交道最多的就是framework层,我们主要关注framework层是如何启动并调度各应用进程协调工作的。从ZygoteInitmain方法开始,我们先看framework启动流程的时序图(省略了一些步骤)大体如下:
[外链图片转存失败(img-Gm3OOCcd-1568628095444)(http://on-img.com/chart_image/5b694cb9e4b025cf4939ddf2.png)]

1.ZygoteInit.main

 public static void main(String argv[]) {
        ZygoteServer zygoteServer = new ZygoteServer();

        // Mark zygote start. This ensures that thread creation will throw
        // an error.
        ZygoteHooks.startZygoteNoThreadCreation();
		...
        try {
            // Report Zygote start time to tron unless it is a runtime restart
            if 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android系统启动流程可以分为以下几个步骤: 1. 启动电源以及系统启动:当电源按下时,引导芯片代码开始执行,加载引导程序Bootloader到RAM,并执行该程序。 2. 引导程序Bootloader:引导程序是一个小程序,其主要作用是将系统OS启动起来并运行。 3. Linux内核启动:内核启动时,进行系统设置,包括设置缓存、被保护存储器、计划列表,并加载驱动。内核会在系统文件中寻找"init"文件,并启动init进程或系统的第一个进程。 4. init进程启动:init进程是Android系统的第一个用户空间进程,它负责启动和管理其他系统进程。init进程会读取init.rc文件,根据其中的配置启动系统服务和应用进程。 5. Zygote进程和SystemServer进程启动:Zygote进程是一个特殊的进程,它作为应用进程的模板,用于快速创建新的应用进程。SystemServer进程是Android系统的核心服务进程,负责启动和管理各种系统服务。 6. 应用层进程启动:在Android系统中,应用层进程包括Launcher进程,即主屏幕的进程,以及其他应用程序的进程。这些进程会根据用户的操作和应用的需求来启动和管理。 总结起来,Android系统启动流程包括引导程序Bootloader的加载和执行、Linux内核的启动、init进程的启动、Zygote进程和SystemServer进程的启动,以及应用层进程的启动。这些步骤共同完成了Android系统的初始化和启动。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Android系统启动流程(一)解析init进程启动过程](https://blog.csdn.net/itachi85/article/details/54783506)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android系统启动流程](https://blog.csdn.net/xhmj12/article/details/128149490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Android 面试必备 - 系统、App、Activity 启动过程“一锅端”](https://blog.csdn.net/zzz777qqq/article/details/115698795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值