美文网首页
Android优化之Systrace

Android优化之Systrace

作者: 南歌ccc | 来源:发表于2019-02-21 18:12 被阅读17次
    首先我们需要了解一下什么是systrace

    systrace命令允许您在系统级别的设备上运行的所有进程中收集和检查时序信息。它结合了来自Android内核的数据,例如CPU调度程序,磁盘活动和应用程序线程,以生成HTML报告,类似于图1中所示。(摘自 Android Developers)

    图1
    简言之,systrace是一种代码追踪手段,他能将代码的运行情况,以图文的形式传达出来。因此,我们通过使用systrace可以检测代码的执行情况,发现一些比较隐晦的问题。PS:个人理解systrace属于代码层面的优化,建议app不要过早使用systrace,一般是在常用的优化方式手段使用后,在进行使用syatrace进行优化比较合理。
    简单介绍完systrace,接下来我们了解一下systrace是如何使用的
    第一种方式:使用SDK platform-tools目录下的systrace工具

    systrace工具在Android SDK工具包中提供,位于android-sdk/platform-tools/systrace/

    具体使用方式在此就不赘述,官方文档有详细介绍,需要用到Python命令.

    第二种方式:使用Android Device Monitor工具生成

    我们着重介绍第二种方式,没错,就是Android Device Monitor。这个工具虽然在Android Studio 3.3版本以上被隐藏起来,不过不可否认他的强大。
    具体如何使用,我们往下看:

    • 常规操作,启动Android Device Monitor(需先链接手机或者模拟器)


      启动Android Device Monitor
      熟悉的ADM页面
    • 点击图2箭头所指图标,会打开图3的systrace窗口,在systrace窗口设置好文件输出路径及文件,检测时间,缓冲大小,以及常用检测标签,高级选项。点击OK便开始检测。持续时间为设置好的检测时长。(所以点击开始检测前,把需要检测的app置于准备检测的状态。)


      图2,打开systrace页面
      图3,systrace设置页面
    • 补充说明:
      1.)Destionation file :trace输出的文件路径。
      2.)Trace duration : 配置抓取systrace的时间,通常设置5秒,并在5秒内重现问题,时间太短会导致问题重现时没有被抓到,时间太长会导致Java Heap不够而无法保存,因此在能抓到问题点的情况下,时间越小越好。
      3.)Trace Buffer Size : Buffer Size是存储systrace的size,同样的,太小会导致信息丢失,时间太长会导致Java Heap不够而无法保存,建议20480。
      4.)Enable Application Traces from :如果用户有自己在应用程序中加入自己的systrace log,且此处必须选择这个应用对应的进程名字,否则新加的systrace log不会被抓到。

    Trace.beginSection("sectionName");
    Trace.endSection();
    
    • 进入检测阶段,操作我们的app在需要检测的地方运行即可,检测时间结束图4窗口会自动关闭。


      图4,执行检测中
    • 检测完毕,会在刚才设置的输出路径生成一个html文件,我们用谷歌浏览器打开来看看都是些啥东西。


      trace.htm
      trace.html文件打开效果
    • 密密麻麻的图形,看的是不是有点头大,莫慌,咱们一点一点解开它的面纱。首先这个图文是支持高度缩放的,咱们可以拉大了看,具体操作方式,可以使用右边的四个图标,分别对应:选中,拖拽,左键长点击缩小放大,选中区域使用时间四个功能。不过这里我推荐结合使用键盘wasd来操作更加方便,具体的自行操作就能体会。知道大概操作,我们就能开始分析了。

    • 上图滚动条往下拉,可以看到如下的图
      我们可以看到此界面的Frame的圆圈会显示三种颜色,绿,黄,红。一般红色就是有问题的,要优化的地方。
      点击箭头的红色Frame,会出现如下视图:


      问题定位
      给出的Alert信息

      分析这些Alert信息,能帮助我们定位有问题的方法和地方,比如图中所示,监控的地方出现了一个红色Frame,出现这个问题的原因也如Alert描述的那样,绘制花费了太多时间或者做了太多的耗时工作。结合我们监测代码的地方,发现是一个自定义view在onDraw()方法执行了太多工作,我们进行优化后便解决了这个问题。

    至此,我们对Systrace应该有了初步的认识,也知道大体的使用方法

    相关文章

      网友评论

          本文标题:Android优化之Systrace

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