Systrace的用法小结
通过SysTrace可以帮助我们分析性能问题,包含方法的耗时时长、CPU的使用情况、ANR、布局情况等;相比性能工具TraceView,主要用来分析每个方法的执行时间,对于冷启动而言,想抓trace只能通过代码的方式,这样会导致整个应用比较卡顿,测试出的方法时间,不是真正的执行时间,只能看下时间长短的相对占比。而SysTrace工具,能帮助我们解决抓取的方法时间不真实问题。
一般,抓取SysTrace在User Debug的ROM版本,抓取的信息会非常详细;如果不是User Debug版本,可以通过自定义Tag的方式来丰富信息。
自定义TAG:
Trace.java的对应的自定义TAG方法如下:
traceBegin开始抓取,traceEnd结束抓取(可以嵌套调用,但是一定是要成对出现;另外注意下如果某个方法节点出现异常,会导致顺序错乱,
注意:traceTag一定是在Trace类中定义的常量,而且在抓取的SysTrace的,该TAG有勾选。
Trace.java中定义了如下TAG。
下面代码为自定义TAG的帮助类:
在Activity的onCreate的开始和结束位置调用即可:
这样当启动systrace的时候就会使用自定义的TAG了。如下所示:
打开systrace文件后有如下常用快捷键:
W: 放大页面
S:缩小页面
A:左平移页面
D:右平移页面
M:快速选中区域或者取消选中区域
->: 向右移动一个事件
<-:向左移动一个事件
介绍了自定义TAG,快捷键,那么到底该如何分析trace文件呢?
查找耗时操作:
Systrace可以查看方法的执行时间,方便找出耗时操作,也可以观察出帧的绘制时间。
上图可以看出activityStart的执行时间较长,也就是app的冷启动时间较长。红色的F代表帧的绘制时间过长。
查询UI线程的等待
除了UI线程本身耗时外,有时候,我们自身业务中多线程已经执行任务,会存在同步锁问题,此时UI线程就处于Sleeping状态。
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:线程优先级
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JavaScript 中的12种循环遍历方法
原文: JavaScript 中的12种循环遍历方法 题目:请介绍 JavaScript 中有哪些循环和遍历的方法,说说它们的应用场景和优缺点? 1、for 循环 let arr = [1,2,3];for (let i=0; i<arr.length; i++){console.log(i,arr[i])}// 0 1// 1 2// 2 3 for 循环是 Js 中最常用的一个循环工具,经常用于数组的循环遍历。 2、for in 循环 let obj = {name:'zhou',age:'**'}for(let i in obj){console.log(i,obj[i])}// name zhou// age ** for in 循环主要用于遍历普通对象,i 代表对象的 key 值,obj[i] 代表对应的 value,当用它来遍历数组时候,多数情况下也能达到同样的效果,但是你不要这么做,这是有风险的,因为 i 输出为字符串形式,而不是数组需要的数字下标,这意味着在某些情况下,会发生字符串运算,导致数据错误,比如:'52'+1 = '521' 而不是我们需要的 53。 另...
- 下一篇
5月份值得一看的 Java 技术干货!
5月又即将要离我们远去了,这个月有小长假51劳动节,有54青年节,有513母亲节,更有坑爹的520神马节?!! 废话不说,又到了总结上个月干货的时候了,这个月我们带来了各种Java技术干货,都是不得不看的 Java 实战经验及最新的热门资讯。如果你有错过本月干货,那么你可以在这里统一回顾一下。 image Java序列化技术即将被废除! 分布式作业 Elastic-Job 从理论到实战 京东购物车的 Java 架构实现及原理 最新后端架构师技术图谱!附学习资料~ 为什么比起 IDEA,我更喜欢 Eclipse 《阿里技术参考图册》发布,速度收藏! 少走弯路,给Java 1~5 年程序员的建议 Spring Cloud 多版本管理详解! 坑爹的日志无法按天切割问题 Java中的基本数据类型转换详解 国外大神总结的 10 个 Java 编程技巧 Java 10 最重要的 5 个新特性 Java中获取类名的3种方法 11 个简练的 Java 性能调优技巧 switch case 支持的 6 种数据类型 到底什么是跨域?附解决方案! 教你如何监控 Java 线程池运行状态 Git 12 岁了,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7,8上快速安装Gitea,搭建Git服务器
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境