美文网首页
Systrace UI性能分析

Systrace UI性能分析

作者: perry_Fan | 来源:发表于2019-02-12 23:00 被阅读0次

    在应用程序开发过程中,UI的流畅度是体验的核心,特别是在动画、跳转或者列表的滑动过程中,出现卡顿和无响应是非常影响用户体验的,要解决这些问题首先要找到问题的原因。TraceView是一款利器,Systrace也是很好的分析UI性能的工具。

    Systrace是Android 4.1及以上版本提供的性能数据采样和分析工具。它可以帮助开发者收集Android关键子系统(如surfaceflinger、WindowManagerService等Framework部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观地分析系统瓶颈,改进性能。Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载等,在UI显示性能分析上提供很好的数据,特别是在动画播放不流畅、渲染卡等问题上。

    Systrace工具可以跟踪、收集、检查定时信息,可以很直观地查看CPU周期消耗的具体时间,显示每个线程和进程的跟踪信息,使用不同颜色来突出问题的严重性,并提供如何解决这些问题的建议。

     Systrace是以系统的角度返回一些信息,并不能定位到具体耗时的方法,要进一步获取CPU满负荷运行的原因,就需要使用工具TraceView。
    

    1. Systrace使用方法

    (1)在DDMS上使用

    • 1.打开Android Device Monitor,连接收集并准备需要抓取的界面。
    • 2.单击Systrace按钮进入抓取前的设置,选择需要跟踪的内容。
    • 3.手机上开始操作需要跟踪的过程(如滑动列表)
    • 4.到了设定好的时间后,生成Trace文件。
      1. 使用Chrome打开文件即可分析。

    (2)使用命令行

    $cd android-sdk/platform-tools/systrace
    $python systrace.py  --time = 10 -o mynewtrace.html sched gfx view 
    

    (3) 应用中获取
    Systrace不会追踪应用的所有工作,所以在有需求的情况下,需要添加要追踪的代码部分。在Android 4.3及以上版本的代码中,可以通过Trace类来实现这个功能。它能够让你在任何时候跟踪应用的一举一动。在获取Trace类的过程中,即Trace.beginTransaction() 与 Trace.endSection()之间代码的工作会一直被追踪。
    在代码中加入Trace跟踪需要注意一下两点:

    • 在Trace被嵌套在另一个Trace中的时候,endSection方法只会结束离它最近的一个beginSection(String) ,即在一个Trace的过程中是无法中断其他Trace的。所以要保证endSection与beginSection调用次数匹配。
    • Trace的begin与end必须在同一线程中执行。
      下边着部分代码为使用Trace的例子,在整个方法中含有两个Trace块,可以根据需求定义更多的块,但都要成对出现,如果有开始块但没有结束块,会严重影响应用的性能。
      public void ProcessPeople(){
            Trace.beginSection("ProcessPeople");  
            try{
                Trace.beginSection("Processing A");  
              // code for task...
            } finally {
                Trace.endSection(); // ends 
            }
           Trace.beginSection("Processing B");
            try{
                // code for task2...
            } finally {
               Trace.endSection();
            }
      }  finally {
          Trace.endSection(); 
      }
    

    2. 分析Trace报告

    W、S、A、D 对应了放大、缩小、左移、右移功能。
    与UI绘制关系最密切的是Alerts和Frame两个数据,
    (1)Alerts
    它标记了性能有问题的点,单击该点可以查看详细信息,在右侧边栏还有一个Alerts框,单击可以查看每个类型的Alerts的数量,单击一个Alert可以看到问题的详细描述。
    (2)Frame
    每个应用都有一行专门显示Frame,每一帧就显示为一个绿色的圆圈。当显示为黄色或者红色时,它的渲染时间查过了16.6ms(即达不到60fps的水准)。使用w方法,看看此帧的渲染过程中系统到底做了些什么。同时它会jiang

    相关文章

      网友评论

          本文标题:Systrace UI性能分析

          本文链接:https://www.haomeiwen.com/subject/vonkeqtx.html