系统属性调用评估报告
来源:互联网 发布:怎样安装t3软件 编辑:程序博客网 时间:2024/06/01 08:32
1.目的和意义
目的一:我们预备在系统中内置自己开发的性能评测APK工具,并通过一个SDM系统属性值来进行控制其编译的开关。因此,想先评估一下通过系统属性值控制,会不会对系统的使用造成太大影响。
目的二:系统内获取和设置属性是一个常见的方法,在Settings、Wifi等等模块中有大量使用。但是我们目前并未有属性调用对系统性能影响的评估。通过此次测试评估,能够使我们对这方面的知识有一个精确的认识和把握,有利于今后的性能问题分析。
总之,对于我们把控影响系统的因素,排除这一方面对性能问题带来的影响产生有益帮助。
2.评测环境
手机:项目XX proto
软件版本:v4B1Q-3
系统版本:Android 4.4.2
3.评测方法
3.1第三方应用调用系统公开属性
我们首先编写了一个PropertiesHelper.apk,用来模拟第三方应用对系统公开属性的调用。在这里,我们通过调用系统屏幕亮度的属性值来进行测试。
获取属性的代码:
int mGetPropResult = Settings.System.getInt(cr, Settings.System.SCREEN_BRIGHTNESS);
设置属性的代码:
WindowManager.LayoutParams params = getWindow().getAttributes();params.screenBrightness = 5f;……getWindow().setAttributes(params);
我们获得以下测试数据(10000次均值,单位:ms):
我们得出结论:
- 第三方应用Get属性值的速度调幅较大,性能不稳定;
- 第三方应用Get属性值一次的平均时间为0.187ms;
- 第三方应用Set属性值一次的平均时间为0.093ms。
3.2系统应用调用系统内部属性
因为系统内部属性并不对外开放,而且获取属性的方法为@hide隐藏型,因此,要测试这部分内容,必须在系统源码环境下进行。
我们首先分析获取系统内部属性的方法,主要为:
SystemProperties.get();SystemProperties.getInt();SystemProperties.getBoolean();SystemProperties.getLong();
设置系统属性的方法,主要为:
SystemProperties.set();
这些方法,全都是由SystemProperties.java (frameworks\base\core\java\android\os)进行定义的。
我们可以在这些种类的属性时加入我们自己的统计代码,打印log,进而得到相关评测数据。为了评测的准确和方便,我在Settings中集成了PropertiesCalculatorSettings的功能,具体实现不详细讲了,核心方法如下。
获取属性的代码:
// get:mSvn = SystemProperties.get("ro.def.software.svn");// getInt:mGuestMode = SystemProperties.getInt("persist.security.guestmode", 0);// getBoolean:mResult = SystemProperties.getBoolean("ro.settings.seprate", true);// getLong:mEcmTimeOut = SystemProperties.getLong("ro.cdma.ecmexittimer", 300000);
设置属性的代码:
// set:SystemProperties.set("persist.sys.headset_mode", "2");
我们获得以下数据(10000次均值,单位:ms):
我们得出结论:
- Set一次平均耗时1.796ms;
- Get(String)耗时要高于其他类型(int/boolean/long);
- Get(String)一次平均耗时0.013ms;
- Get(int/boolean/long)一次平均耗时0.007ms;
- Set耗时要高于Get。
4.结论
我们可以通过SDM系统定制属性来控制性能评测工具的集成。
在系统级内置应用中,应该尽量避免频繁设置系统属性值。这个操作我们平时并不经常进行,因此,只要留意和知悉即可。
5.延伸讨论
除了获取系统属性,我们在源码中还经常进行的一项操作是对系统资源的获取和设置,常用的方法如下:
getResources().getBoolean();getResources().getString();getResources().getStringArray();getResources().getInteger();getResources().getDrawable();getResources().getText();
对于这部分内容,未来纳入评估之中也将具有很大意义,可以抽时间来进一步研究。
报告详细数据,请见单独文章:
《系统属性调用评估表》
- eyelike@2015-01-28
- 系统属性调用评估报告
- 系统属性调用评估表
- 系统属性调用评估方法介绍
- “爱情评估”系统阶段报告
- 操作系统实验报告-系统调用
- 系统架构评估中的质量属性+评估方法(SAAM,ATAM)
- Liferay Portal评估报告
- Unity3D可用性评估报告
- 软件项目风险评估报告
- 软件项目风险评估报告
- 人品评估报告
- Golang评估报告
- Linux添加内核系统调用报告
- JSP网上商店系统评估
- 系统架构评估
- linux 系统性能评估
- 实时系统性能指标评估
- Windows 系统评估工具
- activiti modeler在线编辑器关闭跳转路劲自定义
- [leetcode] 65. Valid Number 解题报告
- Leetcode: Roman to integer
- 51nod 1134 最长递增子序列 nlogn lis
- js判断IE版本
- 系统属性调用评估报告
- 第10、11周项目3 警察和厨师(1)
- 什么是Node.js
- 231. Power of Two
- Spark入门实战系列--5.Hive(上)--Hive介绍及部署
- 优先队列-堆排序
- Post方式请求网络数据
- linux学习(四):实体链接与符号链接
- 加快eclipse