ddms java 截图,DDMS 那些事

谈到安卓应用优化,不得不提一个工具——DDMS,DDMS的主要作用就是检测一段时间内cpu的占用率,精确到各个方法的占用时间,通过DDMS发现主线程被过分阻塞的方法,找到这些容易阻塞主线程的方法,可以通过合理的子线程调度来完成耗时操作,达到提高应用流畅度的目的

两段测试代码

Debug.startMethodTracing("testApp");

Debug.stopMethodTracing();

根据需要在程序中插入以上代码,第一行标识trace检测过后,生成名为testApp.trace的文件,需要通过指令

adb pull /sdcard/testApp.trace D:/temp

把trace文件输出到D盘,可以自定义输出目录

打开sdk目录下的D:\AS_sdk\tools,双击monitor.bat,打开DDMS,在DDMS中打开刚刚输出的文件

27e711e78cd87ec961f13057e11b26b5.png

左上方是线程目录

右上方是cpu占用描述

30a36bc3736e6d4a9b3f09db1ed7f3dd.png

主要指标说明:

Incl(Inclusive) Cpu Time

方法本身和其调用的所有子方法占用CPU时间.

Excl(Exclusive) Cpu Time

方法本身占用CPU时间.

Incl Real Time

方法(包含子方法)开始到结束用时.

Excl Real Time

方法本身开始到结束用时.

Call + Recursion Calls/Total

方法被调用次数 + 方法被递归调用次数.

Cpu Time/Call

方法调用一次占用CPU时间.

Real Time/Call

方法调用一次实际执行时间.

底部就是各个方法调用的明细,粗略看有几百个方法,一脸懵逼!其实大多数都是java提供的api,自己项目真正被调用的方法并不多

如何入手,看第一行,默认按照降序排列,第一行就是toplevel——整个app的cpu占用时间,点击toplevel就会展开内部到底有多少个方法被调用,被展开的方法,都是在同一个线程里面按照顺序被调用的,可以对比Incl Cpu Time来寻找耗时操作,再想办法把他们丢到子线程里面去(需要考虑数据共享和同步的问题),基本上涉及到IO操作的,网络,集合运算,都是耗时操作。开太多子线程怎么办,用线程池进行管理吧!

https://my.oschina.net/carbenson/blog/2875291

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值