通过SysTrace可以帮助我们分析性能问题,包含方法的耗时时长、CPU的使用情况、ANR、布局情况等;相比性能工具TraceView,主要用来分析每个方法的执行时间,对于冷启动而言,想抓trace只能通过代码的方式,这样会导致整个应用比较卡顿,测试出的方法时间,不是真正的执行时间,只能看下时间长短的相对占比。而SysTrace工具,能帮助我们解决抓取的方法时间不真实问题。

一般,抓取SysTrace在User Debug的ROM版本,抓取的信息会非常详细;如果不是User Debug版本,可以通过自定义Tag的方式来丰富信息。

自定义TAG

Trace.java的对应的自定义TAG方法如下:

Trace.java

traceBegin开始抓取,traceEnd结束抓取(可以嵌套调用,但是一定是要成对出现;另外注意下如果某个方法节点出现异常,会导致顺序错乱,

注意:traceTag一定是在Trace类中定义的常量,而且在抓取的SysTrace的,该TAG有勾选。

Trace.java中定义了如下TAG。

Trace TAG

下面代码为自定义TAG的帮助类:

自定义TAG

在Activity的onCreate的开始和结束位置调用即可:

使用自定义TAG

这样当启动systrace的时候就会使用自定义的TAG了。如下所示:

自定义TAG结果

打开systrace文件后有如下常用快捷键:

W: 放大页面

S:缩小页面

A:左平移页面

D:右平移页面

M:快速选中区域或者取消选中区域

->: 向右移动一个事件

<-:向左移动一个事件

介绍了自定义TAG,快捷键,那么到底该如何分析trace文件呢?

查找耗时操作:

Systrace可以查看方法的执行时间,方便找出耗时操作,也可以观察出帧的绘制时间。

耗时操作

上图可以看出activityStart的执行时间较长,也就是app的冷启动时间较长。红色的F代表帧的绘制时间过长。

查询UI线程的等待

除了UI线程本身耗时外,有时候,我们自身业务中多线程已经执行任务,会存在同步锁问题,此时UI线程就处于Sleeping状态。

UI线程等待

Step1: 选中红色区域(CPU执行状态),可以看到如下统计信息:

Sleeping:表示线程处于睡眠态,显示白色

Runnable:表示线程处于可执行态显示蓝色

Running:表示线程处于运行态显示绿色

Uninterruptible Sleep: 一般表示IO操作

从统计的信息可以看出Sleeping的时长99多ms

Step2:在CPU轴找出“白条较长”的区域,光标点击,并按M键选中,可以详细的看到该Sleeping的时长,线程信息等。

Step3:继续放到区域,可以看到在“白条区域”后面,紧接着一个“蓝条区域”,代表当前的UI线程从Sleeping态变化到了Runnable态(红色标注区域)

Step4:点击Runnable区域,可以看到其详细信息(由于Runnable区域比较小,可以使用快捷键->,快速从Sleeping事件移动到Runnable事件);关键信息时:{wakeup from tid: 20704},可以知道UI线程被20704线程所唤醒。

Step5:搜索该线程信息:Comm:线程名称;Tid:线程id;Prio:线程优先级

Systrace的用法小结相关推荐

  1. oracle @spool,Oracle spool 用法小结

    Oracle spool 用法小结 转自:http://wallimn.javaeye.com/blog/472182 对于SPOOL 数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句 ...

  2. js push(),pop(),unshift(),shift()的用法小结

    js中push(),pop(),unshift(),shift()的用法小结 1.push().pop()和unshift().shift() 这两组同为对数组的操作,并且会改变数组的本身的长度及内容 ...

  3. C++ :: 的用法小结

    原文:http://blog.csdn.net/whz_zb/article/details/6843369 :: 的用法小结: 用于将类内声明的静态数据成员在类外初始化: 用于将类内声明的函数成员在 ...

  4. Java中getResourceAsStream的用法小结

    2019独角兽企业重金招聘Python工程师标准>>> Java中getResourceAsStream的用法小结 一.Java中的getResourceAsStream主要有以下三 ...

  5. setscale方法的用法_基于BigDecimal.setScale的用法小结

    1. BigDecimal num1 = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失 2. BigDecimal num2 = new BigDecimal( ...

  6. java.nio.ByteBuffer用法小结

    转载自  java.nio.ByteBuffer用法小结 在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入 ...

  7. jsoup解析HTML用法小结

    转载自   jsoup解析HTML用法小结 使用HttpClient+jsoup做采集器有一段时间了,发现jsoup很好用,而且还有很多方便的东西都没怎么用上.于是想根据官网上的cookbook来对j ...

  8. [转]ssh常用用法小结

    ssh常用用法小结 1.连接到远程主机: 命令格式 : ssh name@remoteserver 或者 ssh remoteserver -l name 说明:以上两种方式都可以远程登录到远程主机, ...

  9. Linux: chmod 和 chown用法小结

    chmod chmod指令是更改文件读写执行权限的. 文件权限可以通过ls -a或ll来看,在每个文件前有10个字符,第一个是d是文件夹,否则为一划.后面三组rwx,分别是读取,写入和执行的权限; 三 ...

最新文章

  1. iOS架构-xcodebuild常用命令(22)
  2. 资源跳转--response重定向和request转发
  3. Linux - How to Take ‘Snapshot of Logical Volume and Restore’ in LVM
  4. chrome调试工具常用功能整理
  5. 关于Jboss/Tomcat/Jetty的JNDI定义123
  6. OpenCV中高斯混合背景建模算法汇总
  7. java日历类add方法_Java日历computeFields()方法及示例
  8. (79)Vivado创建约束的方法
  9. 收集异常,不会给用户弹出异常信息
  10. Harmony OS — TextField输入框
  11. 辗转相除法求最小公约数
  12. 数独游戏的设计与实现
  13. python学习笔记--python简介
  14. Apache --Tomcat 8下载与配置(Tomcat压缩包下载 Windows 7 x64)
  15. ATX电源故障导致某些主板不能启动
  16. springboot接入支付宝支付
  17. 【WPS表格】避免数据重复录入快速核对某列数据是否相同对比两个工作表的数据
  18. winsat查询windwos里disk、mem、cpu性能
  19. 【Linux操作系统应用T1】
  20. file not recognized: File format not recognized

热门文章

  1. spark stage 划分 源码
  2. java开发环境怎样选择_怎样搭建Java开发环境?
  3. mysql存储过程实验几轮_想问下数据库中有关存储过程的实验,求大神!
  4. home assistant gpio 温度计_Calsys 500BB辐射温度计
  5. 03 | 事务隔离:为什么你改了我还看不见?笔记(转)
  6. CentOS 6.6下Redis安装配置记录
  7. 删除本地端口指令(启动时提示端口已经被使用)
  8. SpringBoot 精通系列-使用Swagger2构建RESTful APIs
  9. 用计算机如何修改wif密码,wifi修改密码,教您电脑怎么修改wifi密码
  10. 栈的基本操作(数组/链表)