时间:2025-02-03 来源:网络 人气:
你有没有想过,当你按下手机电源键的那一刻,安卓系统是如何从无到有,从黑屏到多彩界面的呢?今天,就让我带你一起揭开安卓系统启动逻辑的神秘面纱,让你对手机的世界有更深的了解。
一、手机开机,从点亮屏幕开始
按下电源键,手机屏幕亮起,这是手机启动的第一步。其实,这个过程并不简单。首先,电源管理芯片(PMU)检测到脉冲信号,产生时钟脉冲。CPU开始启动系统自检程序,进行自检。自检完成后,CPU通过IIC总线控制PMU输出手机各电路的工作电压,如VDD1、VDD2、VDD3、AVDD等。接下来,13M晶体工作,产生13MHz时钟,一路给CPU提供工作主时钟,另一路给射频主芯片提供基准频率源。CPU通过IIC总线校准PMU输出的各路工作电压,校准完成后便输出片选信号和地址信号给FLASH,调用开机程序,实现开机。
二、引导程序,启动BootLoader
开机程序加载后,接下来是BootLoader的舞台。BootLoader是引导程序,负责将操作系统拉起。它首先读取预置在手机中的引导分区,然后加载内核镜像和ramdisk镜像。内核镜像负责启动操作系统,ramdisk镜像则提供启动过程中所需的文件系统。
三、Linux内核,启动init进程
内核启动后,会查找并执行init进程。init进程是系统中的第一个进程,其他进程都是它的子进程。init进程负责初始化系统,包括挂载文件系统、启动各种服务、解析rc文件等。
四、解析rc文件,启动zygote进程
rc文件是一堆脚本指令,init进程可以读取rc文件来运行脚本,从而启动其他进程。在解析和执行rc文件的过程中,会fork一个zygote进程。zygote进程是Android系统中的孵化器进程,负责创建和管理Android应用进程。
五、zygote进程,孵化Android应用
zygote进程加载核心Java类并对其进行初始处理。这些类可被Android应用程序重用,因此,此步骤使它们可以更快地启动。zygote的初始工作完成后,该进程将侦听套接字并等待请求。
当用户点击应用图标或系统启动应用时,zygote进程会调用caller函数,caller函数会反射调用android.app.ActivityThread.main(String[])。ActivityThread.main(String[])是整个安卓应用的出生点,也就是安卓应用的启动逻辑。
六、ActivityThread,启动Activity
进入ActivityThread.main后,可以看到ActivityThread的参数已经完成了初始化。安卓会根据这些参数来加载相关APP的application类、activity类。ActivityThread进入loop、dispatchMessage、handleMessage、access、handleBinApplication等过程,安卓系统会将待创建的线程交给loop来创建,并且发送信息,作为内存交换。
七、
通过以上步骤,安卓系统完成了从黑屏到多彩界面的启动过程。这个过程看似简单,实则复杂。每一个环节都至关重要,任何一个环节出现问题,都可能影响到手机的正常使用。了解安卓系统启动逻辑,有助于我们更好地使用手机,解决手机使用过程中遇到的问题。