目录
前言
在Android项目中,需要各个APP相互交互有时候需要共享数据和状态,因此经常会使用ContentProvider、AIDL和SystemProperties等等。
在上面几个中SystemProperties是最简单的一种方式。
但是这个只能在系统应用中调用,因为SystemProperties翻译为中文叫系统属性。
当如果你的是非系统应用,也可以用的,可以通过反射。
SystemProperties系统属性
SystemProperties中文直译[系统属性],是Android系统内属性全局共享方式之一。
通过get和set接口可以对系统的属性进行读取/设置。
它作为一个服务运行,管理系统配置和状态。所有这些配置和状态都是属性。每个属性是一个键值对(key/value pair),其类型都是字符串。
如下都是系统接口,不是系统应用无法使用.
public static String get(@NonNull String key) { return native_get(key); } public static String get(@NonNull String key, @Nullable String def) { return native_get(key, def); } public static int getInt(@NonNull String key, int def) { return native_get_int(key, def); } public static long getLong(@NonNull String key, long def) { return native_get_long(key, def); } public static boolean getBoolean(@NonNull String key, boolean def) { return native_get_boolean(key, def); } public static void set(@NonNull String key, @Nullable String val) { native_set(key, val); }
这些属性可能是有些资源的使用状态,进程的执行状态,系统的特有属性。
使用adb改变SystemProperties的值
Android中除了通过get和set接口可以对系统的属性进行读取/设置,还可以通过adb中的getprop和setprop来获取和改变。
adb shell getprop
规则:
adb shell getprop <key> 查看手机上key属性状态值。
# 读取persist.sys.boot_first中保存的值 adb shell getprop persist.sys.boot_first
adb shell setprop
规则:
adb shell setprop key 设置某个属性key的状态值
# 读取persist.sys.boot_first中保存的值 adb shell setprop persist.sys.boot_first true
特别属性
ro. 属性
如果属性名称以ro.开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。
如果设置过,还想去设置,会抛异常的。
libc : Unable to set property "ro.sys.boot_first" to "false": error code: 0xb System.err: java.lang.RuntimeException: failed to set system property System.err: at android.os.SystemProperties.native_set(Native Method) System.err: at android.os.SystemProperties.set(SystemProperties.java:183)
persist. 属性
如果属性名称以persist.开头,当设置这个属性时,其值也将写入/data/property。
net.属性
如果属性名称以net.开头,当设置这个属性时,“net.change”属性将会自动设置,以加入到最后修改的属性名( netresolve模块的使用这个属性来追踪在net.*属性上的任何变化。)
ctrl. 属性
属性ctrl.start和ctrl.stop是用来启动和停止服务。
每一项服务必须在/init.rc中定义.系统启动时,与init守护进程将解析init.rc和启动属性服务。
一旦收到设置ctrl.start属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。
这项服务的启动结果将会放入init.svc.<服务名>属性中。
客户端应用程序可以轮询那个属性值,以确定结果。
参考文章