三分钟带你了解Android 系统启动流程详解 |
您所在的位置:网站首页 › 安卓启动过程是linux虚拟机启动吗 › 三分钟带你了解Android 系统启动流程详解 |
前言 Android的运行机制(AMS)是Android系统中的一项核心服务,它主要负责管理系统的四大组件的、切换和调度,以及应用进程的整个生命周期的管理和调度。与操作系统中的进程管理和调度模.,AMS也是一个Binder的实现类,它允许应用进程通过Binder机制与系统服务进行交互。 通常情况下,每个Android应用都在其自身的进程中运行。当应用需要执行某些代码时,系统会为该应用创建一个新的进程,并使其保持运行状态,直到不再需要该应用并且系统需要回收其内存以供其他应用使用。 近年来,Android面试官提出了更加深入和广泛的问题: 问题1:你是否了解Android系统的启动流程? 问题2:为什么system_server需要在Zygote中启动,而不是由init直接启动? 问题3:为什么要专门使用Zygote进程来孵化应用进程,而不是让system_server来进行孵化呢? 问题4:你能详细描述一下死锁是如何产生的吗? 问题5:为什么Zygote不采用Binder机制进行IPC通信? 还有许多其他问题…… ![]() 下面给大家依次分析一下图中各个层次的含义 Loader层、系统电源以及系统启动 当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行;加载引导程序到RAM,然后执行引导程序。 引导程序是在Android操作系统开始运行前的一个小程序,是运行的第一个程序。因此,它是针对特定的主板与芯片的,可以使用redboot、uboot、qibootloader或者开发自己的引导程序。它不是Android操作系统的一部分,引导程序是OEM厂商或者运营商加锁和限制的地方。 引导程序分两个阶段执行:检测外部的RAM以及加载对第二阶段有用的程序;引导程序设置网络、内存等,这些对于运行内核是必要的。为了达到特殊的目标,引导程序可以根据配置参数或者输入数据设置内核。 Kernel层 Kernel层指的就是Android内核层。这里一般指开机刚结束进入Android系统,Kernel层的启动流程如下:启动swapper进程(pid=0),这是系统初始化过程kernel创建的第一个进程,用于初始化进程管理、内存管理、加载Display、Camera、Binder等驱动相关工作;启动kthreadd进程,这是Linux系统的内核进程,会创建内核工作线程kworkder、软中断线程ksoftirqd和thermal等内核守护进程,kthreadd是所有内核进程的鼻祖。 Native层 这里的native层主要包括有init进程孵化的用户空间的守护进程、bootanim开机动画和hal层等。init是Linux系统的守护进程,是所有用户空间进程的鼻祖。init进程是Linux系统中用户空间的第一个进程,进程号固定为1。init进程会孵化出ueventd、logd、healthd、installd、adbd等用户守护进程;init进程还会启动ServiceManager(Binder服务管家)、bootanim(开机动画)等重要服务。init进程孵化出zygote进程,Zygote进程是Android系统的第一个Java进程(虚拟机进程),zygote进程是所有Java进程的父进程。 Framework Zygote进程是由init进程通过解析init.rc文件后fork生成的。Zygote进程主要包含:加载ZygoteInit类、注册Zygote Socket服务端套接字;加载虚拟机;PreloadClasses;PreloadResources。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开发工程师的竞争越来越激烈,但是Android开发仍然是一项必备的技能,企业对人才的需求也从未停止过。不过,这也对我们提出了更高的要求。如果你只是为了完成日常任务而进行复制和粘贴操作,或者只是为了完成项目需求而草草了事,那么你可能已经不再是一名合格的工程师了。 如果此时你还没有掌握一套主流技术,那么你就必须在最短的时间内迅速掌握住,不然你就会被社会所淘汰,那我们应当如何去学习呢? 首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们! ![]() 本学习手册深入剖析了Android系统源代码,详细讲解了Android框架初始化过程及主要组件的工作原理,旨在通过实例和案例介绍 Android Framework 的核心概念和技术,从而帮助开发者更好地理解 Android 应用程序的设计和开发。 该手册适合具有一定 Android 应用开发经验的程序员,希望能通过深入学习 Android Framework 来帮助开发者更好地理解和掌握这一技术。 ![]() Android系统完整的启动过程,从系统层次角度可分为 Linux 系统层、Android 系统服务层、Zygote进程模型三个阶段; 知识要点: 第一节 Android启动概括、第二节 init.rc解析、第三节 Zygote、第四节 面试题![]() Binder作为Android进程间通信的机制,可以看做是一个驱动。在Android中,常见的进程间通信例如系统类的:打电话、闹钟等;自己创建的:像WebView、视频播放、音频播放、大图浏览等。 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 有需要的朋友点击下方卡片免费领取!!!! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |