文档章节

有关android的property机制

吃草小蚁
 吃草小蚁
发布于 2014/03/05 14:56
字数 510
阅读 187
收藏 4

其实property就是name&value对,与常见系统中的配置项没有差异。在android系统中,大量使用了property_set和property_get,用来设置和获取某一property。下面来分析一下。

property_set/property_get位于libcutils.so库。任何进程若要调用这两个函数,需要链接libcutils.so。

libcutils.so调用到了__system_property_set和__system_property_get函数,这两个函数位于 bionic库中,源代码文件为bionic/libc/bionic/system_properties.c,生成的库文件为 libc_common.so。

对于set和get,分别会创建socket,发送消息到服务端。服务端位于init进程中,有一个property_service进程专门负责这个。 该service读取socket消息,进行set和get的处理。property_service代码位于system/core/init /property_service.c

在system_properties.c和property_service.c中都用到了共享内存(用mmap实现),这里我开始有些搞不懂:如果用socket机制的话,只需要管理进程来维护内存即可,客户端不许要访问该内存,干嘛要用共享内存呢?


原来,android这样做是为了效率考虑。在system_properties.c的get调用中,可以通过只读方式访问共享内存,直接获取配置。当然了,为了保证get的时候别人不在set,避免读写冲突,get时需要等待一个信号量。对于set,system_properties.c会通过socket发送消息到service端处理,service端增加或者更新property后会wake该信号量。service端以读写方式打开共享内存。


为 什么要这样设计呢?因为系统中由大量的get调用,get可以直接访问共享内存,所以访问更快。对于set,需要交给服务端处理,这样开销比较大,因为用 到了socket,但因为set调用相对较少,所以问题也不严重。另为,android系统由以ctl打头的property,这种property比较 特殊,可以控制服务的运行和停止,将这些控制放在service(即init进程)也就理所当然了!

附上一个框图:

© 著作权归作者所有

共有 人打赏支持
吃草小蚁
粉丝 15
博文 63
码字总数 110019
作品 0
深圳
高级程序员
私信 提问
SystemProperties源码分析 获取 Android WIFI接口

SystemProperties.java这个类是@hide的,所以不对外公开,一般开发者是访问不到的,但是我们可以通过反射机制来使用。通过反射取得wifi的接口名为例! 下面通过Android源码讲解SystemPropert...

wangxigui
2013/07/12
0
0
Android SystemProperties设置/取得系统属性的用法总结

1.Android SystemProperties简介 介绍了设置属性需要的权限,已经设置权限的方法。 Systemproperties类在android.os下,但这个类是隐藏的,上层程序开发无法直接使用。其实用java的反射机制是...

chengche
2014/02/10
0
0
谷歌否认微软有关 Android 僵尸网络的指责

【赛迪网讯】7月7日消息,据国外媒体报道,谷歌周四已否认微软有关Android僵尸网络的指责。 微软工程师特里-金克(Terry Zink)周二表示他发现Android设备正被用来发送垃圾邮件,金克认为可能是...

oschina
2012/07/07
1K
3
深入理解SELinux/SEAndroid(最后部分)

接第二部分的内容(http://blog.csdn.net/innost/article/details/19641487) SEAndroid最后一部分 全文PDF下载地址为:http://vdisk.weibo.com/s/z68f8l0xZUS9w 深入理解SELinux/SEAndroid......

邓凡平
2014/03/02
0
0
故意为之?安卓9.0以前的全部系统版本均受到“API-breaking”漏洞的影响

        Nightwatch Cybersecurity于8月29日发布消息称,发现Android新漏洞,它使恶意应用程序得以绕过权限检查和现有的防护,访问系统广播信息。根据该通报,这一漏洞的信息如下:  ...

嘶吼RoarTalk
09/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部