图解Android系统按下电源到显示界面的5个关键过程
一、引导程序启动
当电源按下时,引导芯片代码从预定义的地方(固化在ROM)开始执行。
加载引导程序BootLoader到RAM中,然后执行。BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。
接着,Linux内核启动,设置缓存、被保护存储器、计划列表、加载驱动。
图示:(此处为文字描述,图片已插入至下方)
二、init进程启动
内核完成系统设置后,在系统文件中寻找init.rc文件,并启动init进程。
init进程负责创建和挂载启动所需的文件目录,初始化和启动属性服务,解析init.rc配置文件并启动Zygote进程。
图示:(已在上方展示init进程启动图示)
三、Zygote进程启动
init进程fork出Zygote进程后,Zygote进程会创建一个服务端socket,等待AMS(Activity Manager Service)发起socket请求。
Zygote进程启动过程中,会创建AppRuntime并调用其start方法,启动Zygote进程;创建Java虚拟机并为Java虚拟机注册JNI方法;通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层;通过registerZygoteSocket方法创建服务器端Socket,并通过runSelectLoop方法等待AMS的请求来创建新的应用程序进程;启动SystemServer进程。
图示:
四、系统服务启动
SystemServer进程被创建后,启动Binder线程池,以便与其他进程进行通信。
创建SystemServiceManager,用于对系统的服务进行创建、启动和生命周期管理。
启动各种系统服务,这些服务在ServiceManager进程中完成注册和获取,跨进程通信上使用Android的binder机制。
图示:
五、应用启动与窗口显示
应用启动过程:
Launcher进程向AMS请求创建根Activity。
AMS判断根Activity所需的应用程序进程是否存在,如果不存在,就会请求Zygote进程创建应用程序进程。
应用程序进程启动后,AMS请求创建应用程序进程并启动根Activity。
窗口显示过程:
应用程序要显示或更新界面时,会通过设置一个视图(如Activity的内容视图)来开始这个过程。
如果视图的结构发生变化,就会调用requestLayout方法,标记视图树需要重新布局和测量。
WMS(Window Manager Service)负责处理窗口的创建、大小位置的更新、层次管理等,为新窗口分配Surface(即绘制窗口内容的画布),并管理窗口在屏幕上的显示次序。
SurfaceFlinger负责将来自不同窗口的Surface合成,然后将最终的图像渲染到屏幕上。
图示:
以上就是Android系统从按下电源到显示界面的5个关键过程的图解说明。