当前位置: 首页 > article >正文

一文学习Android中的Property

在 Android 系统中,Property 是一种全局的键值对存储系统,允许不同组件和进程间以轻量级的方式进行数据传递。它主要用于系统配置、状态标识等场景,使得不同进程能够通过属性的设置或获取来通信。property 的核心特性是快速、高效,并且对所有进程都可见,非常适合配置、标志位等需求。

在这里插入图片描述

一、Property 基础概念

1. 结构和特性

  • 键值对形式:每个 property 由一个键和一个值组成,键名一般是一个字符串,用点号分隔,用于标识模块和配置项(如 ro.build.version.sdk)。
  • 存储类型:所有 property 的键和值都是字符串。
  • 系统全局可见:property 在整个 Android 系统内都是可见的,任何进程可以读取大部分属性,但写入权限受到限制。

2. 属性命名约定

  • ro. 开头:表示只读属性,通常在系统启动时由系统设置,应用启动后无法更改。常用于设备和系统版本信息。
  • sys. 开头:表示系统级属性,系统内大部分组件可以设置和读取,适用于状态标识和通信。
  • persist. 开头:表示持久化属性,会被保存到设备的持久化存储中,即使重启设备也会保留。
  • ctl. 开头:用于控制系统服务的启动和停止。

二、Property 的使用场景

  • 系统版本信息:如 ro.build.version.release,表示 Android 系统的版本信息。
  • 设备硬件信息:如 ro.product.model,表示设备型号。
  • 进程间通信:在特定条件下,应用可以通过设置或监听属性来触发或响应事件。
  • 调试和开发:很多系统属性可以用于调试,例如 debug 开头的属性,常用于控制调试输出。

三、使用方式

Android 中的 property 操作主要有三种方法:adb shell 命令、SystemProperties 类,以及 prop 文件。

1. 使用 adb shell 命令

在调试过程中,可以使用 adb shell 命令直接操作 property

# 获取属性值
adb shell getprop ro.build.version.release

# 设置属性值(仅限系统允许的属性)
adb shell setprop sys.example.property "Hello"

2. 使用 SystemProperties 类

在 Android 应用开发中,可以使用 SystemProperties 类来获取或设置 property

import android.os.SystemProperties;

public class PropertyExample {
    public static void main(String[] args) {
        // 获取属性值
        String sdkVersion = SystemProperties.get("ro.build.version.sdk");
        System.out.println("SDK Version: " + sdkVersion);

        // 设置属性值(仅限允许设置的属性)
        SystemProperties.set("sys.example.property", "Hello Android");
    }
}

注意:大部分系统属性是只读的,应用进程一般无权限写入。

3. 通过 prop 文件配置

在 Android 系统启动过程中,系统会从 /system/build.prop 等多个文件中读取属性,这些文件存储了默认的系统属性。

常见的文件:

  • /system/build.prop:包含系统的核心属性,例如系统版本信息。
  • /vendor/build.prop:包含供应商相关的硬件信息。
    开发者可以在定制 ROM 时修改这些文件,以设定设备的默认属性。

四、Property 的实现机制

1. 内存区域

Android 系统为 property 分配了一个专用的共享内存区域,通过匿名共享内存和内核进程间通信 (IPC) 机制,实现进程间的高效数据共享。

2. 属性服务

属性服务是 Android 中管理和维护属性的核心组件。它负责初始化属性、响应 get/set 请求,并确保属性的安全性和访问权限。属性服务通常在 init 进程启动时初始化。

3. 属性变化通知

Android 提供了一种机制,允许进程监听属性的变化。应用可以通过轮询或者绑定回调来监听属性值的变化,适用于特定事件触发和系统状态更新。

五、常用属性示例

属性名说明示例值
ro.build.version.sdk系统 SDK 版本33
ro.product.model设备型号Pixel 6
persist.sys.timezone默认时区America/Los_Angeles
sys.boot_completed系统启动完成标志1
debuggable系统是否可调试1
ro.build.version.release系统版本号13

六、限制与注意事项

  1. 权限限制:应用不能随意设置 property,大多数属性是系统属性,只有系统进程或具有特殊权限的应用才能设置。
  2. 性能影响:频繁地设置属性可能会影响系统性能,因此在设计中应谨慎。
  3. 只读属性:以 ro. 开头的属性一般是只读的,应用和系统进程均无法更改。

七、总结

Android 中的 property 是一种灵活的全局键值对配置方式,具有高效的读取性能。它被广泛用于系统信息标识、设备信息存储以及进程间通信等。了解 property 的命名规范、使用方法及其背后的实现机制有助于更好地控制和优化 Android 系统。


http://www.kler.cn/a/388014.html

相关文章:

  • ESLint 使用教程(三):12个ESLint 配置项功能与使用方式详解
  • 第二天python笔记
  • 计算机网络分析题
  • PCL 点云分割 基于CPC算法的分割
  • 云计算:定义、类型及对企业的影响
  • 物流企业新闻稿怎么写?货运行业品牌宣传背书的报纸期刊杂志媒体有哪些
  • [Redis] Redis主从复制模式
  • 在vue3的vite网络请求报错 [vite] http proxy error:
  • 微星爆破弹ddr4wifi接线梳理研究
  • Flink滑动窗口(Sliding)中window和windowAll的区别
  • redis用法(二)
  • 项目功能--运营数据统计报表导出
  • 【真题笔记】21年系统架构设计师案例理论点总结
  • 【SpringBoot】19 文件/图片下载(MySQL + Thymeleaf)
  • 说说webpack中常见的Plugin?解决了什么问题?
  • Ubuntu18.04更换PREEMPT RT内核
  • 软考:论容器编排
  • 微信小程序——01开发前的准备和开发工具
  • C++builder中的人工智能(20):如何在C++中开发一个简单的Hopfield网络
  • 推荐一款管道数据检索工具:Pipedata-Pro
  • C语言复习第9章 字符串/字符/内存函数
  • 卫星授时服务器,单北斗授时服务器,北斗卫星时钟服务器
  • 域名邮箱推荐:安全与稳定的邮件域名邮箱!
  • 【go从零单排】迭代器(Iterators)
  • chrony服务器(linux)
  • w029基于springboot的网上购物商城系统研发