TraceView,Systrace UI分析实例

  • 之前讲解了TraceView和Systrace的基本使用方式 跳转连接

  • 接下来我们通过实例来分析一下是什么原因导致了UI绘制过程中每帧的时间超过了16ms

  • 首先我们来看一下通过Android systrace生成的trace.html文件
    在这里插入图片描述

  • 上图中的每帧代表了一个F,当F为红色或者黄色的时候,代表这一帧的时间超过了16ms,我们点击这个红色的帧底部会有Frame标签,如下图。
    在这里插入图片描述
    上图中列举了三个导致绘制时间比较长的原因,measure时间过长,draw时间过长,Scheduling delay(调度延迟)一个线程在处理一块运算的时候,在很长一段时间都没有被分配到CPU上面做运算,从而导致这个线程在很长一段时间都没有完成工作。那么具体是什么原因导致的我们要通过TraceView来分析到底是什么方法导致的。下图是抓取的TraceView的结果图。
    在这里插入图片描述
    上面的选项我们主要关注两点:

  1. Calls+Recur Calls/Total 某函数被调用次数
  2. Cpu Time/Call 某函数调用CPU时间与调用次数的比 ,相当于该函数平均执行时间
    我们先按照CPU Time/Call排序,排列在首位的是
    在这里插入图片描述
    点开查看如下:
    在这里插入图片描述
    其中有Parents和Children,Parents代表了自身函数,Children代表了内部函数,可以通过右侧的耗时可以看到内部函数的耗时比较长,接下来点开Children的.loop()
    在这里插入图片描述
    同上我们继续点击查看dispatchMessage
    在这里插入图片描述
    点击图中红框的部分查看
    在这里插入图片描述
    其中有几个方法直接指引到了业务代码中。我们可以查看具体的方法来分析比如:下图中请求完网络后hideLoading花费的时间是多少。
    在这里插入图片描述
    比如做本地I/O操作用时

在这里插入图片描述
比如下面的部分,我们在总体时间排序上也可以看到通过main的方法查看也可以一步一步的走到这里。在这里插入图片描述
接下来耗时方法的优化就看自己的了。绘制超时的原因还需要通过布局的优化来提高,接下来我们会分析布局的优化。

发布了119 篇原创文章 · 获赞 28 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/ldxlz224/article/details/99464038