Android启动深度解析:Zygote进程的启动与属性服务

需积分: 0 1 下载量 139 浏览量 更新于2024-07-10 收藏 464KB PPT 举报
"本文详细分析了Android系统的启动过程,特别是Zygote进程的启动以及属性服务(propertyservice)的工作原理。" 在Android操作系统中,启动流程始于Linux内核的加载,接着是初始化进程init的运行。init是用户空间的第一个进程,它的进程ID为1,可以通过`ps`命令查看。init进程扮演着核心角色,负责创建其他关键系统进程,如Zygote进程,以及管理Android系统属性。 init进程的入口位于`idh.code\system\core\init\init.c`文件的`main`函数。其主要工作流程包括四个关键步骤: 1. 解析配置文件:init首先解析`init.rc`和特定设备配置文件,如`init.sp6820a.rc`,这些文件定义了系统启动时要执行的动作和服务。 2. 执行阶段动作:在这个阶段,Zygote进程被创建,它是Android系统的核心组成部分,用于预先加载Dalvik虚拟机和核心库,以提高系统启动速度。 3. 初始化属性服务:`property_init()`函数初始化属性相关的资源,随后`property_start_service()`启动属性服务,使得系统能管理和获取属性值。 4. 事件监听:init进程进入一个无限循环,监听socket和属性服务器的事件,以便对系统进行动态响应。 Zygote进程的启动是由init进程解析`init.rc`文件中的指令来触发的。利用`service_start`函数,init通过`fork`和`execv`系统调用来创建Zygote。Zygote作为Android的孵化器,后续的系统服务和应用进程都是由它 fork 出来的。 属性服务(propertyservice)类似于Windows的注册表,存储键值对形式的系统属性。开发者可以通过`adb shell`工具,使用`getprop`和`setprop`命令获取或设置这些属性值。在init.c中,`property_init()`和`start_property_service()`函数负责属性服务的初始化和启动。 属性系统的工作机制如下:所有需要访问属性的进程(属性消费者)都会映射一块共享内存到自己的地址空间,直接读取属性值。而设置属性的进程(属性设置者)同样加载这块共享内存,但它们不能直接写入,而是通过Unix Socket将属性变更发送给属性服务。属性服务接收到请求后,将属性值写入共享内存和属性文件,确保系统的同步和一致性。 Android的启动过程是一个复杂而有序的系统级任务,涉及到多个关键组件的协同工作,其中Zygote和属性服务对于整个系统的运行至关重要。理解这些底层机制有助于开发者深入把握Android的运行机制,从而优化应用程序的性能和用户体验。