android启动过程

来源:互联网 发布:linux解压war包 编辑:程序博客网 时间:2024/06/05 14:30

android的启动过程还是不复杂的,但要真去研究其语言实现确实是很麻烦的事。查找了相关资料,这里只给出启动过程的大致分析。

一、系统加电,执行bootloader。其负责初始化软件运行所需的最小硬件环境,最后加载内核到内存中。

二、内核加载进内存后,将首先进入内核引导阶段,在引导阶段最后,调用start_kernel进入内核启动阶段。最终启动用户空间的init程序。
三、init程序负责解析init.rc配置文件,开启系统守护进程。两个最重要的守护进程是zygote和ServiceManager。前者是android启动的第一个Dalvik虚拟机,它将负责启动Java世界的进程;后者是Binder通信的基础。
四、zygote启动子进程system_server,在中开启了android核心系统服务并将核心系统服务添加到ServiceManager,然后系统进入systemReady状态。
五、在systemReady下,ActivityManagerService与zygote中的socket通信,通过zygote启动Home应用。

注:zygote是android中一个非常重要的守护进程服务,所有其他Dalvik虚拟机进程都是通过zygote复制出来的,即调用了fork函数(一个进程调用了fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间,然后把原来的进程的所有值都复制到新的进程中,只有少数值与原来的进程的值不同,相当于克隆了一个自己)。android引用程序有Java编写,运行在各自独立的Dalvik虚拟机中。如果每个应用程序在启动之时都需要单独运行和初始化一个虚拟机,会大大降低系统性能,因此先创建一个Dalvik虚拟机,然后通过它孵化出其他的虚拟机进程,进而共享虚拟机内存和框架层资源,可大大提高应用程序启动和运行速度。

0 0
原创粉丝点击