版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AndroidSystemProperty分析FromSystem Property代码中量存在:SystemProperties.set()/SystemProperties.get();通过这两个接可以对系统的属性进读取/设置,顾名思义系统属性,肯定对整个系统全局共享。通常程序的执以进程为单位各相互独,如何实现全局共享呢?System Properties是怎么回事,是如何实现的呢?属性系统是android的个重要特性。它作为个服务运,管理系统配置和状态。所有这些配置和状态都是属性。每个属性是个键值对(key/value pair),其类型都是字符串。这些属性可能是有些资源的使状态,进程的
2、执状态,系统的特有属性可以通过命令adb shell :getprop查看机上所有属性状态值。或者 getprop init.svc.bootanim制定查看某个属性状态使setprop init.svc.bootanim start 设置某个属性的状态特别属性 :如果属性名称以“ro.”开头,那么这个属性被视为只读属性。旦设置,属性值不能改变。如果属性名称以“persist.”开头,当设置这个属性时,其值也将写/data/property。如果属性名称以“net.”开头,当设置这个属性时,“net.change”属性将会动设置,以加到最后修改的属性名。(这是很巧妙的。 netresolve模
3、块的使这个属性来追踪在net.*属性上的任何变化。)属性“ ctrl.start ”和“ ctrl.stop ”是来启动和停服务。每项服务必须在/init.rc中定义.系统启动时,与init守护进程将解析init.rc和启动属性服务。旦收到设置“ ctrl.start ”属性的请求,属性服务将使该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放“ init.svc.“属性中。客户端应程序可以轮询那个属性值,以确定结果。framework访问系统服务流程framework通过SystemProperties接操作系统属性,SystemProperties通过JNI调访问系统属性。
4、frameworksbasecorejavaandroidos SystemProperties.java: Jni代码位置:frameworksbasecorejniandroid_os_SystemProperties.cpp获取系统属性 阻塞式:=操作在bioniclibcbionicsystem_properties.c中: =,进程启动后数据已经将系统属性数据读取到相应的共享内存中,保存在全局变量_system_property_area_;进程之间都是独的,系统属性数据是如何读取到当前进程空间中的呢?后续介绍。设置属性异步socket通信: = = s= )通过socket向pro
5、perty_service发送消息,property_service运在哪呢?三Property Service创建服务端socketinit进程启动监听过程中:systemcoreinitInit.csocket; =:)socket= ,listen(fd,Property Service 是运在init守护进程中。接收到消息之后什么,还是要先弄清楚整个Property Service是如何实现的呢,后续介绍。先看看Property Service接收到消息后的处理。四Property Service 监听socket处理Property Service监听socket消息的处理过程:s=
6、 ) )(+, ;通过设置系统属性启动/关闭Service:权限判断: unsignedunsigned;=; );所以如果想要应有权限启动/关闭某Native Service:需要具有system/root权限找到对应应uid gid,将应名称加到control_perms列表中处理消息 可以通过设置系统属性 改变服务的执状态 start/stop: (!strcmp(msg,(!strcmp(msg,(!strcmp(msg, =(连着前就是ctr.start和ctr.stop系统属性:来启动和停服务的。例如:/ start boot animationproperty_set(ctl.s
7、tart, bootanim);在init.rc中表明服务是否在开机时启动: 启动服务的时候会判断: & 修改系统属性值: unsignedunsigned=; =);看这个修改系统属性权限表:=, 0 0 0 0 0 0,sys., 0, 0,0指定了特定的户有修改 带有某些前缀的系统属性值。到这基本就是Property对外的基本作流程,Property Service内部具体如何实现,操作运,跨进程空想内存等问题仍未清除是如何处理的。五属性系统设计属性系统的上层架构如下图所:Property 运在init进程中,开机从属性件中加载到共享内存中;设置系统属性通过socket与Property
8、 Service通信。Property Consumer进程将存储系统属性值的共享内存,加载到当前进程虚拟空间中,实现对系统属性值的读取。Property Setter进程修改系统属性,通过socket向Property Service发送消息,更改系统属性值。六属性系统实现属性系统设计的关键就是:跨进程共享内存的实现。下将看看属性系统实现具体过程:Init进程执:初始化Property Service:systemcoreinitproperty_service.c初始化共享内存空间:)= += =_system_property_area_:每个进程都会使此变量,指向系统属性共享内存区域,
9、访问系统属性,很重要。位于:bioniclibcbionicsystem_properties.c中,属于bionic库。后将介绍各进程如何加载共享内存。将件作为共享内存映射到进程空间内存使: a=,|= | =,=加载系统属性默认数据件: ( =加上上所述:Property Service Socket资源的创建,来监听socket通信连接设置系统属性,在Init进程中Property Service完成了初始化。将得到该内存区域数据结构:七进程共享系统属性内存空间实现Property Service运于init进程中,将件映射为创建块共享内存空间,但在整个系统中,其他进程也能够读取这块内存
10、映射到当前进程空间中,是如何实现的呢?Service进程启动:将共享内存空间fd size作为环境变量传递给新创建进程 =)sprintf(tmp,(notify_service_state(svc-name,=共享内存空间fd size作为环境变量传递给新创建进程后,将在何处使呢?将系统属性内存空间映射到当前进程虚拟空间:进程在启动时,会加载动态库bionic libc库:bioniclibcbioniclibc_init_dynamic.c中:void _attribute_(constructor) _libc_preinit(void);根据GCC的constructor/destructor属性:给个函数赋予constructor或destructor,其中constructor在main开始运之前被调,destructor在main函数结束后被调。如果有多个constructor或destructor,可以给每个constructor或destructor赋予优先级,对于con
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南省驻马店确山县联考2026年初三五月中旬英语试题含解析
- 第四单元 维护国家利益
- 2026年设备委托采购合同(1篇)
- Unit 2 Lets talk teens Period 3 教学设计(高中英语)
- 2025年高考地理试卷(甘肃卷)
- 2026年气象科普馆客流统计分析
- 2026年公交公司品牌建设实施方案
- 精神病患者的安全管理
- 肝硬化患者营养干预措施
- 胸膜炎急症处理方案
- 浅基坑承台开挖施工方案
- 对简支钢桁架桥的设计进行计算分析
- 面部美容缝合技术要点
- 《运动营养指导》课件
- 化工原理实验--绪论学习资料
- 温室火灾的防控与处理
- 空调安装调试及售后服务方案
- 4.3.1空间直角坐标系市公开课一等奖课件公开课一等奖课件省赛课获奖课件
- 居然之家租赁合同
- 四乙基铅抗爆剂生产技术项目可行性研究报告
- 中考复习之标点符号的使用方法79张课件
评论
0/150
提交评论