Android内存分析工具集【8】-TraceView

常用的性能检测工具是traceview,集成于 Android Device Monitor 中。从Android Studio3.0开始, Android Device Monitor 被废弃,取而代之的是 Android Profiler ,其中提供了 Memory Prodiler 、CPU Profiler、Network Prodiler三大功能。

内存优化(包括内存泄漏)常用的是 MAT 或者 LeakCanary ,而 Memory Profiler 相当于将 MAT 的简化版功能集成到 AS 中。相对的在性能优化方面,CPU Profiler 相当于将 traceview 的功能集成到了 AS 中。

所以,使用AS3.0之前版本的,可以使用traceview,而使用AS3.0以后版本的,除了traceview,还可以选择CPU Profiler。

上文出自:https://blog.csdn.net/lovelease/article/details/82758927     分析及调试手段详细说明

概述

TraceView是Android平台配备一个很好的性能分析工具,它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到方法。

如何使用

  • 通过Android studio自带的traceview查看(Android profiler)。
  • 通过Android SDK自带的Debug。
  • 通过DDMS中的traceview查看。

1  通过Android studio 打开Android profiler 点击其中的CPU就会有以下的界面

如上图所示,CPU Profiler的视图包括以下内容:
①App timeline:显示CPU在执行过程中的时间轴。
②线程 timeline:显示线程列表以及每个线程在某个时间段占用的CPU的资源情况。
③CPU timeline:列出CPU在App运行过程中CPU使用情况。
④Method Trace:在指定线程中,执行的方法栈,横行表示执行的时间轴,纵向表示方法执行的调用轴。

使用步骤

  • 打开CPU Profiler界面
  • 点击下方的红色圆点,开始记录(Record)堆栈(此时按钮变灰色),记录一段时间段后,再点击下停止记录(此时按钮变红色)
  • 在②区域选择你用分析的线程
  • 在③区域中选择要分析的CPU片段(只能有记录的CPU片段)
  • 查看④区域,就会有一系列的执行方法队列显示出来,通过横向查看可以看出某个方法的执行时间(横向时间越长,执行的时间越长),通过纵向表示方法的调用关系。

技术说明

②区域中,线程占用CPU资源,会有不同颜色标记:

  • 绿色: 线程处于活动状态或准备好使用CPU。也就是说,它处于”运行”或”可运行”状态。
  • 黄色: 线程处于活动状态,但是在完成其工作之前,它正在等待I / O操作(如文件或网络I / O)。
  • 灰色: 线程正在睡眠,不会消耗任何CPU时间,当线程需要访问尚未可用的资源时,有时会发生这种情况。要么线程进入自愿性睡眠,要么内核使线程休眠,直到所需的资源可用。

④区域中,不同的方法也会颜色也有所不同:

  • 橙色:系统方法
  • 蓝色:第三方API(包括java语言的api)
  • 绿色:App自身方法

2  通过Android SDK自带的Debug

  • 在开始记录的点写上代码Debug.startMethodTracing("tracePath");
  • 在终止记录的点写上代码Debug.stopMethodTracing();
  • 通过adb pull /mnt/sdcard/tracePath.trace .将trace导出指定的文件夹中
  • 通过Android studio打开trace文件,界面同CPU Profiler差不多。

     

优点  :能清晰分析指定业务、功能块的方法执行情况(代码控制)。


3  通过DDMS中的traceview查看

前期准备工作(以windows系统为基准)

1、下载Android SDK,下载地址就各显神通了。
2、解压或者安装Android SDK。
3、解压后的目录下的{sdk.dir}\tools配置到Path环境中。

使用说明

  • 打开window命令指示符,即cmd命令

  • 在命令行中输入monitor或者ddms(区分版本),打开界面

     

  • 如图点击红色圈圈按钮开始记录,再次点击后终止记录且弹出以下界面

     

    • ①线程timeLine:线程在执行过程消耗CPU/时间
    • ②执行TimeLine: 时间轴
    • ③方法详细信息轴:方法以及其调用方法的执行/消耗CPU时间
  • 查看main线程,查看执行时间长的时间段(②区域中同一个颜色起止时间)并点击他,在③区域中会弹出对应的方法栈信息,你就会发现有个Thread.sleep方法阻塞的main线程。

技术说明

  • Incl Cpu Time:方法在CPU中执行所有时间(包含其调用的方法所消耗的时间)
  • Excl Cpu Time: 方法在CPU中执行的时间(不包含其调用的方法所消耗的时间)
  • Incl Real Time:方法运行消耗的所有时间(包含子方法)
  • Excl Real Time:方法运行消耗的时间(不包含子方法)
  • Calls + Recur Calls/Total :方法调用、递归次数(重要指标,防止死循环)
  • Cpu Time/Call :该方法平均占用 CPU 的时间(重要指标,可以看出单个方法占用CPU的平均时间,但是要防止在个别调用处出现长时间占用,然后被平均了)
  • Real Time/Call :平均执行时间,包括切换、阻塞的时间(重要指标,可以看出单个方法执行的平均时间值,但是要防止在个别调用处出现长时间调用,然后被平均了)

作者:粗旷的码农
链接:https://www.jianshu.com/p/7e9ca2c73c97
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值