`

Android 的属性系统

 
阅读更多
Android 的属性系统
2010-01-19 16:17
tag
android property setprop getprop ro

由于对Android 的属性系统不是很了解,所以翻译了这篇文章《Android Property System》

每个属性都有一个名称和值,他们都是字符串格式。属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性。
在系统初始化时,Android将分配一个共享内存区来存储的属性。这些是由“init”守护进程完成的,其源代码位于:device/system /init。“init”守护进程将启动一个属性服务。属性服务在“init”守护进程中运行。每一个客户端想要设置属性时,必须连接属性服务,再向其发 送信息。属性服务将会在共享内存区中修改和创建属性。任何客户端想获得属性信息,可以从共享内存直接读取。这提高了读取性能。
客户端应用程序可以调用libcutils中的API函数以GET/SET属性信息。libcutils的源代码位于:device/libs/cutils。API函数是:
int property_get(const char *key, char *value, const char *default_value);
int property_set(const char *key, const char *value);
而libcutils又调用libc中的 __system_property_xxx 函数获得共享内存中的属性。libc的源代码位于:device/system/bionic。
属性服务调用libc中的__system_property_init函数来初始化属性系统的共享内存。当启动属性服务时,将从以下文件中加载默认属性:
/ default.prop
/system/build.prop
/system/default.prop
/data/local.prop
属性将会以上述顺序加载。后加载的属性将覆盖原先的值。这些属性加载之后,最后加载的属性会被保持在/data/property中。

特别属性
如果属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。
如果属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。
如果属性名称以“net.”开头,当设置这个属性时,“net.change”属性将会自动设置,以加入到最后修改的属性名。(这是很巧妙的。 netresolve模块的使用这个属性来追踪在net.*属性上的任何变化。)
属性“ ctrl.start ”和“ ctrl.stop ”是用来启动和停止服务。每一项服务必须在/init.rc中定义.系统启动时,与init守护进程将解析init.rc和启动属性服务。一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放入“ init.svc.<服务名>“属性中 。客户端应用程序可以轮询那个属性值,以确定结果。

Android toolbox程序
Android toolbox程序提供了两个工具: setprop和getprop获取和设置属性。其使用方法:
getprop <属性名>
setprop <属性名><<属性值>

Java
在Java应用程序可以使用System.getProperty()和System.setProperty()函数获取和设置属性。

Action
默认情况下,设置属性只会使"init"守护程序写入共享内存,它不会执行任何脚本或二进制程序。但是,您可以将您的想要的实现的操作与init.rc中某个属性的变化相关联.例如,在默认的init.rc中有:

# adbd on at boot in emulator
on property:ro.kernel.qemu=1
start adbd
on property:persist.service.adb.enable=1
start adbd
on property:persist.service.adb.enable=0
stop adbd

这样,如果你设置persist.service.adb.enable为1 ,"init"守护程序就知道需要采取行动:开启adbd服务。

文章中提到的共享内存就是Android特有的共享方式:ashmen

Ashmem是一个匿名共享内存(Anonymous SHared MEMory)系统,该系统增加了接口因此进程间可以共享具名内存块。举一个例子,系统可以利用Ashmem存储图标,当绘制用户界面的时候多个进程也可 以访问。Ashmem优于传统Linux共享内存表现在当共享内存块不再被用的时候,它为Kernel提供一种回收这些共享内存块的手段。如果一个程序尝 试访问Kernel释放的一个共享内存块,它将会收到一个错误提示,然后重新分配内存并重载数据。

转载,

原地址:http://hi.baidu.com/caijiamx/blog/item/d9f23d2b89a147f0e7cd40ff.html

分享到:
评论

相关推荐

    Android 属性系统

    Android 属性系统,在网上找了很久关于这方面的东东,移植很难找到,所以在这里就上传千辛万苦才找来的。

    Android属性系统分析

    随着Android抢占手机市场以后,因为它开源的原因,越来越多的人着手开始学习Android,发点文档,让学习的人少走弯路

    Ophone / Android 系统属性列表

    android/Ophone源码中查找出来的属性总表。可供: 1)平台开发人员 2)刷机设置快速查找使用 3)android 平台学习用

    Android 添加系统设置属性的实现及步骤

    Android 添加系统设置属性的实现及步骤 Android源码开发中,常常要用到一些全局标志或者说变量,这时候我们可以给android系统添加自己想要的属性。 1. 整个android系统都能访问的属性; 2.该属性值永久保存;  ...

    Android程序设计结课设计 Android 考试系统设计

    3 3.2系统界面设计(给出界面截图及其主要类的属性设置) 3 3.3系统程序设计(功能模块给出详细的程序代码,重点语句的注释) 3 3.4各个类的组合结构 3.5各个类说明 4.各种功能截图 5. 设计总结

    Android 取消系统默认 launcher3的home属性,保证第三方的launcher正常使用.patch

    Android 取消系统默认 launcher3的home属性,保证第三方的launcher正常使用.patch

    Android属性动画与自定义View——实现vivo x6更新系统的动画效果

    相关博客http://blog.csdn.net/qq_25193681/article/details/51910984

    Android Studio实现个人记账系统源码.zip

    Android Studio实现个人记账系统源码。基于安卓基础知识点开发的个人记账工具,其中包括记录当天收支情况,计算当天以及当月共收支总钱数,能查看历史账单,能对于每月收支情况进行图标分析,百分比分析, 能够搜索...

    android屏幕自适应android属性[参考].pdf

    android屏幕自适应android属性[参考].pdf

    安卓在系统控件中加入自定义属性

    安卓如何在系统控件中加入自定义属性 android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="20dp" android:layout_gravity="center" android:src="@mipmap/...

    Android控件属性

    因为默认的ListItem背景是透明的,而ListView的背景是固定不变的,所以在滚动条滚动的过程中如果实时地去将当前每个Item的显示内容跟背景进行混合运算,所以android系统为了优化这个过程用,就使用了一个叫做...

    Android开发EditText属性.txt

    android:textAlign="center"//EditText没有这个属性,但TextView有,居中 android:textColorHighlight="#cccccc"//被选中文字的底色,默认为蓝色 android:textColorHint="#ffff00"//设置提示信息文字的颜色,默认为...

    Android自定义属性深入理解

    仿照系统TextView的自定义属性,以及讲解obtainStyledAttributes各个参数的用处,详情请见博客https://blog.csdn.net/qq_29951983/article/details/80219746

    Android 获取系统内置的APP应用信息.rar

    比如获取android系统中的录音机、相机、应用包访问权限帮助程序、android系统信息、设置、联系人存储、外部存储设备属性、Android键盘(AOSP)、移动数据信息、系统用户界面、密钥链、输入设备、HTML查看程序、移动...

    安卓Android校园办公用品管理系统可导入AndroidStudio

    Android端: 1.只允许普通用户登录及注册。 2.普通用户在系统中仅有创建,查看,修改申请表,查看办公系统总表,查看领用表的权限。 3.在系统中可以很明确地查看到自己可以进行的操作。 应用服务器端: 1.只允许系统...

    Android中调用系统所装的软件打开文件

    //设置intent的Action属性 intent.setAction(Intent.ACTION_VIEW); //获取文件file的MIME类型 String type = getMIMEType(file); //设置intent的data和Type属性。 intent.setDataAndType(/*uri*/Uri.fromFile&...

    Android系统概述与开发环境

    在GuessNumber应用的基础之上新增一个功能:生成随机的目标数字...在应用界面上新增一个按钮,按钮的id属性为btnGenNumber,text属性为“generate”。点击该按钮后随机生成一个1-100之间的随机整数做为猜测的目标数字。

    修改android系统属性.zip

    操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络...

    Android代码-安卓视图动画和属性动画集锦

    AndroidAllAnimation 安卓视图动画和属性动画集锦 效果图中展示的是视图动画和属性动画 两种动画都分为代码...另外,关于android动画部分,我的另一个 帧动画和布局动画的小项目也给出了较为详细的用法。欢迎访问。

    Android系统控件获取自定义属性

    我们如果想在ImageView,Button,TextView等系统控件中在XML中配置自定义属性该如何实现呢?例如我们有一个scrollView,在ScrollView里面有上述的一些控件的自定义属性,实现在滑动Scrollview时,里面的控件根据滑动...

Global site tag (gtag.js) - Google Analytics