android系统启动流程

来源:互联网 发布:postgresql mysql 电商 编辑:程序博客网 时间:2024/06/15 16:53

1、开机

开始给系统供电,此时硬件电路会产生一个复位时序,包括磁盘、内存、CPU和其他硬件全部要准备就绪,复位完成后,CPU开始执行第一条指令。该指令指向引导程序(Bootloader),其作用是装载真正的应用程序。

2、执行操作系统内核

初始化各种硬件,包括内存、网络接口、显示器、输入设备,建立各种内部数据结构,内核初始化完毕后开始运行具体的应用程序。

3、运行Android程序

通过该程序可以方便的启动其他的应用程序,Android系统相当于被执行的第一个应用程序。Linux系统启动完成后,内核读取init.rc文件,启动Android内核。

4、Framework启动过程:

系统运行的第一个的Dalivik虚拟机程序zygote,接下来所有的Dalivk虚拟机进程都是这个卵孵化出来的,zygote进程主要包括两个主要模块:

  • Socket服务端。用于接收启动新的Dalivk进程的命令
  • Framework共享类及共享资源。当zygote进程启动后,会装载一些共享的类及资源,当这些类和资源装载后,新的Dalivk进程就不需要再装载这些类和资源。

zygote孵化出的第一个Dalvik进程叫做SystemServer,SystemServer进程创建了一个Socket客户端,并由Ams负责管理该客户端,之后所有的Dalvik进程都是通过该客户端被启动,当需要启动新的APK进程时,Ams会通过该Socket客户端向Zygote进程的Socket服务端发送一个启动命令,然后孵化出新的进程。

启动各种系统服务线程

SystemServer进程在Android中相当于神经中枢的作用。APK中能够直接交互的大部分系统服务都在此进程中运行,比如Wms、Ams、Pms等。这些系统服务都是以一个线程的形式存在于SystemServer进程中。

启动第一个Activity

当以上服务线程都被启动后,其中Ams服务是最后一个启动的,而在Ams的systemReady()函数中的最后一段代码会发出启动任务队列中最上面一个Activity的消息。用户可以自己设定一个activity作为第一个启动的程序。只要它的intent中添加一个category(Intent.CATEGORY_HOME)。

原创粉丝点击