Android启动与属性服务详解
需积分: 0 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++层,通过精心设计的服务和进程协作,确保了系统的正常运行和属性的高效管理。属性服务作为系统的核心组件,不仅提供了属性的存取功能,还在不同进程间起到了通信的作用。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2012-12-09 上传
2021-05-20 上传
2021-11-18 上传
2021-05-29 上传
2012-12-09 上传
2021-02-09 上传
白宇翰
- 粉丝: 30
- 资源: 2万+
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器