Android启动与属性服务详解

需积分: 0 1 下载量 192 浏览量 更新于2024-07-10 收藏 464KB PPT 举报
本文主要探讨了Android程序中访问属性的方式以及Android系统的启动过程,特别是init进程、Zygote进程和属性服务的重要角色。 在Android程序中,访问属性主要涉及以下几个层次: 1. Java代码访问:在`framework\base\core\java\android\os\SystemProperties.java`中,可以使用`SystemProperties.getBoolean()`和`SystemProperties.set()`方法来获取和设置属性。这些方法封装了对底层属性服务的调用。 2. JNI访问:在`framework/base/core/jni/android_os_SystemProperties.cpp`中,提供了对应的JNI接口`SystemProperties_get_boolean()`和`SystemProperties_set()`,供Java层调用,实现在C++层面访问属性。 3. C++层访问:在`system\core\libcutils\properties.c`中,有两个核心函数`property_get()`和`property_set()`,分别用于获取和设置属性值,它们是底层实现属性服务的基础。 接下来,我们详细分析Android的启动过程: - Linux内核启动:Android系统启动首先是加载Linux内核,随后启动初始化进程`init`,它是用户空间的第一个进程,进程号为1。 - init进程:`init`进程位于`system\core\init\init.c`的`main()`函数中,主要任务包括: - 解析配置文件`init.rc`和`init.sp6820a.rc`,根据配置执行相应操作。 - 启动系统关键进程,如Zygote进程。 - 初始化属性服务`property_init()`,并启动属性服务`property_start_service()`。 - 进入循环,监听socket和属性服务器事件。 - Zygote进程:由`init`进程通过解析`init.rc`文件中的指令启动,采用`fork`和`execv`创建。Zygote进程是所有Android应用的父进程,它预先加载了核心类库并进行了一些优化,当需要创建新应用时,Zygote会通过克隆自身来快速创建新的进程。 - 属性服务(propertyservice):类似于Windows的注册表,属性服务在Android中存储键值对数据。通过`adb shell`,可以使用`getprop`和`setproperty`命令操作属性。`property_init()`和`start_property_service()`在`init.c`中初始化和启动属性服务。属性服务维护一个共享内存区域,供属性读取进程(propertyconsumer)和设置进程(propertysetter)使用。设置进程通过Unix Socket向属性服务发送属性更新请求,由属性服务负责实际的写入操作。 总结来说,Android系统的启动涉及到多个层次的交互,从内核到用户空间,从Java层到C/C++层,通过精心设计的服务和进程协作,确保了系统的正常运行和属性的高效管理。属性服务作为系统的核心组件,不仅提供了属性的存取功能,还在不同进程间起到了通信的作用。