一文学习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 系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/912533.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

node.js安装配置(Windows)

1、下载 CNPM Binaries Mirror 2、安装 3、验证 win R 进入cmd 4、配置环境变量 4.1、创建两个文件夹 4.2、安装目录进入cmd(配置全局属性) 配置两个命令: npm config set prefix "D:\liyunqing\nodejs\node_global"npm config set cache "D:\l…

mp3格式音频怎么做成二维码?扫码获取音频文件的制作方法

随着二维码的广泛使用,现在很多内容都会通过生成二维码的方式来传输内容,通过这种方式可以更快捷的实现内容分享,简化其他人获取内容的流程,有效提高效率。音频是目前常见的一种内容分享方式,比如录音、听力、音乐等类…

【css flex 多行均分有间隙布局】

小程序、web均可使用&#xff0c;我当前用的是小程序 <view class"job_tab_container flex_between"><view class"job_tab_item"></view><view class"job_tab_item"></view><view class"job_tab_item&qu…

单臂路由技术,eNSP实验讲解

单臂路由技术&#xff0c;eNSP实验讲解 一、简要介绍1、概念2、工作原理3、优点4、缺点5、应用场景举例 二、eNSP仿真实验1、步骤一&#xff1a;2、步骤二&#xff1a;3、步骤三&#xff1a;4、步骤四&#xff1a; 三、总结。 一、简要介绍 1、概念 单臂路由&#xff08;Rout…

微服务day03

导入黑马商城项目 创建Mysql服务 由于已有相关项目则要关闭DockerComponent中的已开启的项目 [rootserver02 ~]# docker compose down WARN[0000] /root/docker-compose.yml: version is obsolete [] Running 4/4✔ Container nginx Removed …

Mac如何实现最简单的随时监测实时运行状态的方法

Mac book有着不同于Windows的设计逻辑与交互设计&#xff0c;使得Mac book有着非常棒的使用体验&#xff0c;但是在Mac电脑的使用时间过长时&#xff0c;电脑也会出现响应速度变慢或应用程序崩溃的情况&#xff0c;当发生的时候却不知道什么原因导致的&#xff0c;想要查询电脑…

无需云端!国产开源大语言模型llama.cpp本地实战

作者&#xff1a;高瑞冬 注&#xff1a; 文章是2023年底写的。代码和运行方式虽有些旧&#xff0c;但基本原理一样。现在出来ollama&#xff0c;vllm等工具框架用来本地部署大模型&#xff0c;顺便更新一下。 [TOC](最后有彩蛋) 背景 上海人工智能实验室与商汤科技…

初始JavaEE篇 —— 网络编程(2):了解套接字,从0到1实现回显服务器

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 TCP 与 UDP Socket套接字 UDP TCP 网络基础知识 在一篇文章中&#xff0c;我们了解了基础的网络知识&#xff0c;网络的出…

PVE纵览-从零开始:了解Proxmox Virtual Environment

PVE纵览-从零开始&#xff1a;了解Proxmox Virtual Environment 文章目录 PVE纵览-从零开始&#xff1a;了解Proxmox Virtual Environment摘要什么是Proxmox Virtual EnvironmentPVE的核心功能PVE 优势如何开始使用PVEPVE应用案例总结 关键字&#xff1a; PVE、 虚拟机、 Pr…

08 Oracle数据库故障应对与恢复策略:全面掌握RMAN恢复方法

文章目录 Oracle数据库故障应对与恢复策略&#xff1a;全面掌握RMAN恢复方法一、故障场景及恢复策略1.1 实例失败1.2 介质故障1.3 数据丢失 二、RMAN恢复方法详解2.1 全库恢复2.2 增量恢复2.3 时间点恢复 三、实践与总结 Oracle数据库故障应对与恢复策略&#xff1a;全面掌握RM…

MYSQL隔离性原理——MVCC

表的隐藏字段 表的列包含用户自定义的列和由系统自动创建的隐藏字段。我们介绍3个隐藏字段&#xff0c;不理解也没有关系&#xff0c;理解后面的undo log就懂了&#xff1a; DB_TRX_ID &#xff1a;6 byte&#xff0c;最近修改( 修改/插入 )事务ID&#xff0c;记录创建这条记…

Git超详细教程

Git初始 概念 一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用 记录代码内容&#xff0c;&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 如何学&#xff1a; 个人本机使用&#xff1a;Git基础命令和概念 多…

BK3432芯片SPI方式烧录固件方法

前言 本文介绍 BK3432 芯片的烧录授权。该芯片支持的固件烧录方式为 SPI 烧录 。 BK3432 的固件主要由三部分组成&#xff1a;boot stack app&#xff0c;其中&#xff1a; bk3432_ble_app.bin&#xff1a;生成的 App 部分的原始 bin 文件bk3432_ble_app_app.bin&#xff1…

网站架构知识之Ansible进阶(day022)

1.handler触发器 应用场景&#xff1a;一般用于分发配置文件时候&#xff0c;如果配置文件有变化&#xff0c;则重启服务&#xff0c;如果没有变化&#xff0c;则不重启服务 案列01&#xff1a;分发nfs配置文件&#xff0c;若文件发生改变则重启服务 2.when判断 用于给ans运…

陪诊问诊APP开发实战:基于互联网医院系统源码的搭建详解

时下&#xff0c;开发一款功能全面、用户体验良好的陪诊问诊APP成为了医疗行业的一大热点。本文将结合互联网医院系统源码&#xff0c;详细解析陪诊问诊APP的开发过程&#xff0c;为开发者提供实用的开发方案与技术指导。 一、陪诊问诊APP的背景与功能需求 陪诊问诊APP核心目…

稳压二极管详解

目录 1. 工作原理 2. 稳压二极管的伏安特性曲线 3. 正向特性&#xff1a; 4. 反向特性 5. 稳定电压&#xff08;Vz&#xff09; 6. 动态电阻&#xff08;rz&#xff09; 7.最大耗散功率&#xff08;PzM&#xff09; 8. 最大稳定工作电流&#xff08;IzMAX&#xff09;和…

python爬虫案例——网页源码被加密,解密方法全过程

文章目录 1、任务目标2、网页分析3、代码编写1、任务目标 目标网站:https://jzsc.mohurd.gov.cn/data/company,该网站的网页源码被加密了,用于本文测验 要求:解密该网站的网页源码,请求网站并返回解密后的明文数据,网页内容如下: 2、网页分析 进入网站,打开开发者模式,…

K8S简单部署,以及UI界面配置

准备两台服务器K8Smaster和K8Sminion 分别在两台服务器上执行以下代码 #添加hosts解析&#xff1b; cat >/etc/hosts<<EOF 127.0.0.1 localhost localhost.localdomain 192.168.45.133 master1 192.168.45.135 node2 EOF #临时关闭selinux和防火墙&#xff1b; sed …

【微信小程序】基本语法

一、导入小程序 选择代码目录 项目配置文件 appid 当前小程序的 AppIDprojectname 当前小程序的项目名称 变更AppID&#xff08;视情况而定&#xff0c;如果没有开发权限时需要变更成个人的 AppID&#xff09; 二、模板语法 在页面中渲染数据时所用到的一系列语法叫做模板…

kafka中节点如何服役和退役

服役新节点 1&#xff09;新节点准备 &#xff08;1&#xff09;关闭 bigdata03&#xff0c;进行一个快照&#xff0c;并右键执行克隆操作。 &#xff08;2&#xff09;开启 bigdata04&#xff0c;并修改 IP 地址。 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改完记…