android性能优化(1)—性能评测剖析

一、时间测量

1.java和android提供了以下API来测量时间及性能

System.currentTimeMills

System.nanoTime

Debug.threadCpuTimeNanos

SystemClock.currentThreadTimeMills

SystemClock.elapsedRealTime

SystemClock.upTimeMills


2.测量


为何不使用System.currentTimeMills

a.其精度不够

b.更改系统时间会影响结果


3.System.nanoTime()


运行结果


4.Debug.threadCpuTimeNanos

该方法为android sdk自带,只会测量在当前线程中所花费的时间,如果要在多线程上进行测量,则必须在所有涉及线程的地方调用此方法并把结果加上


运行结果:


可以看到虽说暂停了1s,使其他线程获得调度机会,但是由于Debug.threadCpuTimeNanos只计算当前线程的运行时间,所以结果小于1s

如果我们现在在System.nanoTime的代码中改为如下所示:


运行结果:


可一看到时间大于1s,也就是说System.nanoTime会测量所有线程的运行时间


二、方法调用跟踪

1.Debug.startMethodTracing


上图是android中关于此方法的四个变种

2.demo


a.Debug.startMethodTracing(sdcardPath + "/shadow.trace");会在sdcard目录下生成一个trace文件


b.接着把该文件pull到桌面上

3.使用traceview文件

a.在命令行中输入如下命令


这时将会显示出如下图形界面


下面介绍以下几个选项:

Name:方法名

Incl%:此方法中占的时间百分比(包含子方法)

Inclusive:此方法所花费毫秒数

Excl%:此方法所占百分比(不包含子方法)

Exclusive:此方法所花费毫秒数(不包含子方法)

Calls+RecurCalls/Total:调用和递归调用次数

Time/Call:平均每次调用时间

下面我们来看看测试的方法结果:



可一看到Thread.sleep方法调用了3次,耗时3037.642ms,Thread.sleep又调用了TimeUnit.seconds.toMills和TimeUnit.seconds.excessNano,分别花费0.249和0.071ms,而我们的测试方法则共花费了3038.315ms

Parents:测试方法的调用者

Children:测试方法的调用方法

b.在DDMS中使用traceview

打开ddms视图,连续点击图中红框处两次(第一次表示start,第二次表示stop)


这是会在Eclipse中出现如下traceview视图


使用方法和命令行差不多


三、使用日志调试

android提供了以下日志级别


优先级:

Debug>Info>Warning>Error>Assert


好了,这就是今天要讲的在android中一些性能评估的方法和工具

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值