文档章节

有关android的property机制

吃草小蚁
 吃草小蚁
发布于 2014/03/05 14:56
字数 510
阅读 186
收藏 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
深入理解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
Service 与 Thread 的区别

很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下。 1). Thread:Thread 是程序执行的最小单元,...

带梦想一7飞
2014/02/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何从平面设计转行到UI设计?

时代的变迁,科技的进步,工具的发展,薪资的差距,促使许多人转行的原因,但平面与界面两者之间有着哪些的差异呢?如果,想要转行又该具备哪些条件呢? 平面、界面设计之间的差异性 平面设计...

mo311
8分钟前
1
0
线程池整理

一般在生产环境中,我们都不会直接new一个Thread,然后再去start(),因为这么做会不断频繁的创建线程,销毁线程,过大的线程会耗尽CPU和内存资源,大量的垃圾回收,也会给GC带来压力,延长GC停顿时间...

算法之名
10分钟前
1
0
一句话说清分布式锁,进程锁,线程锁

转载自: https://www.cnblogs.com/intsmaze/p/6384105.html 在分布式集群中的开发中,线程锁往往不能支持全部场景的使用,必须引入新的分布式锁。 线程锁,进程锁,分布式锁 线程锁: 主要用...

nao
12分钟前
0
0
springboot2.x支持自定义JSP标签

JSP标签的tld必须放在webapp下的WEB-INF目录下 参考: https://stackoverflow.com/questions/44746757/using-custom-tag-files-in-jsp-with-spring-boot#...

EasyProgramming
14分钟前
1
0
pg数据库 upsert使用

原文地址 https://blog.csdn.net/rudygao/article/details/50498908 --创建测试数据表create table t (id int constraint idx_t_id primary key,name varchar(20) constraint cst_name no......

philonic
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部