traceview使用总结

文章目录

          • 1.traceview的用途
          • 2.生成trace文件的三种方式
            • (1)代码生成
            • (2)使用android studio生成
            • (3)DDMS生成
          • 3.使用traceview打开trace文件
          • 4.分析trace文件

1.traceview的用途

traceview是Android sdk中的一个工具,用于分析计算性能,跟踪方法耗时导致的卡顿问题。它将traceview文件转为图形,直观的反应出代码的执行时间、执行次数,便于我们分析。

2.生成trace文件的三种方式

trace文件是log文件的一种,可以通过代码,也可以使用Android studio生成。

(1)代码生成
//开始 trace,保存文件到 "/sdcard/homeFragment.trace"
//高版本手机保存到"/sdcard/Android/data/packageName/files/homeFragment.trace"
Debug.startMethodTracing("homeFragment");    
    // ...
Debug.stopMethodTracing();    //结束

导出trace文件到电脑:
adb pull /sdcard/homeFragment.trace C:\Users\Admin\Desktop

若提示No such file,可能保存到sdcard/android 目录下了:
adb pull /sdcard/Android/data/packageName/files/homeFragment.trace C:\Users\Admin\Desktop
packageName是应用的具体包名

(2)使用android studio生成

profile/cpu 下选择记录traceview
traceview使用总结_第1张图片

android studio对trace也做了可视化:包括各方法的执行时间和占比
traceview使用总结_第2张图片

(3)DDMS生成

DDSM 全称 Dalvik Debug Monitor Server,是老版adt的调试工具。可生成trace后,查看。
traceview使用总结_第3张图片

3.使用traceview打开trace文件

新版Android stuido 中已移除了DDMS,这里我们使用traceview工具来查看trace文件信息。

工具目录:androidsdk/tools/traceview.bat

But,打开该目录后发现,新版sdk中已缺失traceview,我们可以下载一个traceview.bat文件放在该目录下,命令行打开:
traceview C:\Users\Admin\Desktop\homeFragment.trace

提示报错:

SWT folder '' does not exist.
Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.

这是依赖库缺失,下载一个老版的sdk/tools/lib,将它放到tools目录下(合并lib)即可。
在这里插入图片描述

虽然提示deprecated,还是可以打开traceview。

4.分析trace文件

1.打开如下:
traceview使用总结_第4张图片

  • 上半部分展示了线程:
    • 不同颜色表示不同方法,颜色约长,执行时间越久。
  • 下半部分展示了方法的执行时间:
    • cpu time/call:该方法占用cpu的时间
    • Calls + Recur Calls/Total :调用、递归次数
    • Incl Cpu Time vs Excl Cpu Time:某方法占用的cpu时间,incl包含内部调用其他方法的时间,excl不包含

2.定位问题

  • 查看耗时的方法:点击 cpu time/call ,按照时间倒序
  • 查看方法执行次数:点击 Calls + Recur Calls/Total,按照次数倒序

排序后逐个排查项目代码,进一步定位问题

3.案例
项目在每次启动主页时,耗时在1.5-2.5s,优化性能时,我们需要具体查看:

  • 哪些方法耗时
    traceview使用总结_第5张图片
    结果:initView方法执行耗时,并将children方法列举出来,我们可以逐步排查优化

  • 哪些方法执行次数过多:
    traceview使用总结_第6张图片

结果:shareUtilUser.getString方法高频执行,查看parents,发现是登录信息,频繁操作导致。跟踪代码,发现每次获取登录的某个信息,会将所有登录相关的数据,都取出来了,因此这里就是我们需要优化的地方了。

PS:附上 traceview下载地址

你可能感兴趣的:(tools,traceview,android,性能优化)