图解Android系统按下电源到显示界面的5个关键过程

复杂的 Android 系统它是怎样运行起来的,App 又是怎样加载呈现在屏幕上的呢?本文通过5个关键过程图示讲述 Android 系统的启动流程。

一 init进程启动图

1.启动电源以及系统启动

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

2.引导程序BootLoader

引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。

3.Linux内核启动

当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。在内核完成系统设置后,它首先在系统文件中寻找init.rc文件,并启动init进程。

4.init进程启动

init进程做的工作比较多(1)创建和挂载启动所需的文件目录。(2)初始化和启动属性服务。(3)解析init.rc配置文件并启动Zygote进程。

二 Zygote进程启动图

init进程fork出Zygote进程后,Zygote进程会创建一个服务端socket,等待AMS发起socket请求。Zygote进程fork出的SystemServer进程会启动各项系统服务。Zygote进程启动共做了如下几件事:

1.创建AppRuntime并调用其start方法,启动Zygote进程。

2.创建Java虚拟机并为Java虚拟机注册JNI方法。

3.通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层。

4.通过registerZygoteSocket方法创建服务器端Socket,并通过runSelectLoop方法等待AMS的请求来创建新的应用程序进程。

5.启动SystemServer进程。

三 系统服务启动图

SystemServer进程被创建后,主要做了如下工作:

1.启动Binder线程池,这样就可以与其他进程进行通信。

2.创建SystemServiceManager,其用于对系统的服务进行创建、启动和生命周期管理。

3.启动各种系统服务。

不管是由init进程启动的独立进程的系统服务如SurfaceFlinger,还是由SystemServer进程启动的非独立进程的系统服务如AMS,都是在ServiceManager进程中完成注册和获取的,在跨进程通信上使用了Android的binder机制。

四 应用启动图

首先Launcher进程向AMS请求创建根Activity,AMS会判断根Activity所需的应用程序进程是否存在并启动,如果不存在就会请求Zygote进程创建应用程序进程。应用程序进程启动后,AMS 会请求创建应用程序进程并启动根Activity。步骤2采用的是Socket通信,步骤1和步骤4采用的是Binder通信。

根Activity启动过程中涉及的进程之间的关系

五 窗口显示图

window的添加过程通过windowmanager的
addview-Windowmanagerglobal的addview-viewrootimpl的setview-requestlayout-sheduletraversals-接着通过Windowssession来完成window的添加过程

1. 视图设置和布局请求

  • setView 方法的调用:应用程序要显示或更新界面时,它会通过设置一个视图(如Activity的内容视图)来开始这个过程
  • requestLayout 方法的调用:如果视图的结构发生变化就会调用 requestLayout 方法。这个方法标记了视图树需要重新布局和测量

2. 窗口管理和渲染

  • WMS:WMS 负责处理窗口的创建、大小位置的更新、层次管理等。WMS 为新窗口分配 Surface(即绘制窗口内容的画布),并管理窗口在屏幕上的显示次序。
  • SurfaceFlinger:SurfaceFlinger 负责将来自不同窗口的 Surface 合成,然后将最终的图像渲染到屏幕上。

View的绘制流程

ViewRootImpl与WMS通信

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值