百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

大厂永恒敲门砖——Android 系统启动流程详解

xsobi 2024-12-28 16:20 1 浏览

正文

AMS 是 Android 中最核心的服务之一,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,它本身也是一个 Binder 的实现类,应用进程能通过 Binder 机制调用系统服务

在大多数情况下,每个 Android 应用都在各自的进程中运行;当需要运行应用的一些代码时,系统会为应用创建此进程,并使其保持运行,直到不再需要它且系统需要回收其内存以供其他应用使用

所以熟悉 Android 启动流程不仅决定了大厂永恒敲门砖,更能体现出工作中最能突显价值的金字招牌

再者近几年面试官也是进一步向深、向广

问题1:你了解Android系统系统启动流程吗?

问题2:system_server为什么要在Zygote中启动,而不是由init直接启动呢?

问题3:为什么要专门使用Zygote进程去孵化应用进程,而不是让system_server去孵化呢?

问题4:能具体说说是怎么导致死锁的吗?

问题5:Zygote为什么不采用Binder机制进行IPC通信?

... ...

Android系统启动流程图


下面给大家依次分析一下图中各个层次的含义

Loader层

系统电源以及系统启动

  • 当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行;加载引导程序到RAM,然后执行

引导程序

  • 引导程序是在Android操作系统开始运行前的一个小程序,是运行的第一个程序,因此它是针对特定的主板与芯片的,可以使用redboot,uboot,qibootloader或者开发自己的引导程序,它不是Android操作系统的一部分,引导程序是OEM厂商或者运营商加锁和限制的地方

引导程序分两个阶段执行:

  • 检测外部的RAM以及加载对第二阶段有用的程序
  • 引导程序设置网络,内存等,这些对于运行内核是必要的,为了达到特殊的目标,引导程序可以根据配置参数或者输入数据设置内核

Kernel层

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

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

Native层

这里的native层主要包括有init进程孵化的用户空间的守护进程,bootanim开机动画和hal层等。init是Linux系统的守护进程,是所有用户空间进程的鼻祖。init进程是Linux系统中用户空间的第一个进程,进程号固定为1

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

Framework

  • Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含: - 加载ZygoteInit类,注册Zygote Socket服务端套接字; - 加载虚拟机; - PreloadClasses; - PreloadResouces
  • Zygote进程fork出System Server进程,System Server是Zygote孵化的第一个进程,地位非常重要
  • System Server进程:负责启动和管理整个Java framework,包含ActivityManager,PowerManager等服务。
  • Media Server进程:负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务

App

  • Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App
  • Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上
  • 所有的App进程都是由Zygote进程fork生成的

现如今Android 工程师的竞争环境越来越激烈,但 Andorid 开发仍然是一个刚需的工种,行业对人才的需求从未终止,但与此同时也对我们提出了更高的要求;如果你仍然只是在日常开发过程中复制粘贴,或者仍以完成一个项目需求为唯一目的,已经不能算是合格的工程师了

如果此时你还没有掌握一套主流技术,那么你就必须在最短的时间内迅速掌握住,不然你就会被社会所淘汰,那我们应当如何去学习呢?

经过十个小时的编码排页,可算把腾讯大牛所整理的一张 Android Framework 思维导图及其配套的一份高工学习手册整理成 PDF 文档,需要的小伙伴:可私信发送 "FW 进阶" 即可 免费获取↓↓↓

————私信发送 "FW 进阶" 即可 “领取《腾讯大牛的 Android Framework 思维导图及高工学习手册》”PDF 版

Android Framework 思维导图


手册内容展示如下:

Framework 高工学习手册— Liunx 内存基础篇


Framework 高工学习手册— Binder 源码篇


Framework 高工学习手册—Hander消息机制篇


Framework 高工学习手册—AMS篇


Framework 高工学习手册—PMS篇


Framework 高工学习手册—WMS篇


需要完整版《腾讯大牛的 Android Framework 思维导图及高工学习手册》PDF 文档的小伙伴:可在评论区下方留言,或者私信发送 "FW 进阶" 即可 免费获取↓↓↓

相关推荐

「真实案例」php文件锁产生的问题和解决方案

本文为php中文网认证作者:“齐天大圣”投稿,欢迎加入php中文网有偿投稿计划!一个真实案例想起自己之前犯过一个相关的错误。当时场景是这样的:有一个微信公众号项目,调用微信公众号的接口都需要acces...

PHP大文件读取操作 php大文件处理

简单的文件读取,一般我们会使用file_get_contents()这类方式来直接获取文件的内容。不过这种函数有个严重的问题是它会把文件一次性地加载到内存中,也就是说,它会受到内存的限制。因此,加...

Linux文件链接(软硬)的介绍及其应用

linux中对文件的链接分为两种,一种是硬链接,另一种是软链接。今天和大家介绍下这两种链接,以及如何去使用他们。硬链接首先我们来看硬链接,我们来用php中变量的引用来对比吧。$a=100;$b...

包含connect.php文件的写法以及循环输出查询结果

包含connect.php文件的写法以及循环输出查询结果我们先把代码写在下面:<?phprequire_once("./connect.php");$sql="selec...

PHP读取文件内容的五种方式 php读取txt

读取文件内容的五种方式分享下php读取文件内容的五种方法:好吧,写完后发现文件全部没有关闭。实际应用当中,请注意关闭fclose($fp);--...

多学习才能多赚钱之:php文件怎样打开和运行

php-fpm的进程数可以根据设置分为动态和静态。静态:直接开启指定数量的php-fpm进程,不再增加或者减少;动态:开始的时候开启一定数量php-fpm进程,当请求变大的时候,动态的增加php-fp...

PHP函数和文件 php中的文件包含语句以及各自的异同点

程序员编程语言之间的鄙视链:...

Linux服务器出现Socket Error「Too many open files」怎么办

最近在用freeswitch软交换进行语音通话,通话的时候需要调用音频文件进行播放,当并发量上来的时候,freeswitch监听服务的端口会不断的down掉,查看日志发现报了一个错如下:这个问题经常...

CMS系统天花板!这可能是在开源界上最值得推荐的CMS系统了

系统简介novel-plus是一款功能完善的原创文学CMS系统,支持多端使用(PC、WAP)阅读。由前台门户系统、作家后台管理系统、平台后台管理系统和爬虫管理系统等多个子系统构成...

用织梦建站的公司企业你们瑟瑟发抖吗?织梦开启维权之路索赔不低

织梦也就是dedecms这个网站内容管理系统,织梦建网站曾经在很长一段时间内非常出名,几乎成为建站首选,个人自不必说,很多小建站公司也是用的织梦直接来套站,虽然吧强梦系统漏洞bug一大堆,但是因为简便...

六个优质开源项目,让你更了解Django框架开发

Django是一个开源的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被用来开发CMS软件的,所以Django很适合用来搭...

Python的Web开发--第一个Django项目

Python有强大的数据库,那么对数据分析之后的结果需要在web上展现,当然我们也可以借助Java等框架,但是多此一举,虽然python生态圈没有Java完善,但python有自己的轻量级和重量级框...

基于AHNCMs-15的对称超级电容器,纳米碳模板和预陶瓷聚合物如何

在阅读此文前,诚邀您请点点右上方的“关注”,既方便您进行讨论与分享,还能及时阅读最新内容,感谢您的支持。基于AHNCMs-15的对称超级电容器具有14.7Whkg的高能量密度?1在250瓦克的功率...

「某CMS漏洞」SQL注入漏洞分析 sql注入漏洞原理、常见测试方法及防御方法

前言这个CMS非常适合入门代码审计的人去学习,因为代码简单且漏洞成因经典,对一些新手有学习价值,...

织梦cms怎么添加商桥? 织梦cms教程

作为一个前端的销售人员,很多人会自己去买服务器域名做网站,当我们网站做好以后希望安装一个商桥上去,这样就可以在线沟通交互了。相信也有很多和我一样看不懂代码的小伙伴在问怎么添加商桥代码到网站文件中,我...