作者:anly_jun
链接:https://www.jianshu.com/p/da2a4bfcba68
本文暂不对工具的使用做过多的深入,在后续的具体实例中会具体说明怎么用这些工具来达成分析目的和解决问题的。
话不多少,先看一下常用App性能测试和分析工具,如图:
一、官方工具
一般来说,学习一门新的技术,最应该做的就是阅读其官方文档,那是最权威的。Android本身给我们提供了很多App性能测试和分析工具,而且大部分都集成到Android Studio或DDMS中,非常方便使用。
1.1 StrictMode
1.1.1 说明
顾名思义, "严格模式", 主要用来限制应用做一些不符合性能规范的事情. 一般用来检测主线程中的耗 时操作和阻塞. 开启StrictMode后, 如果线程中做一些诸如读写文件, 网络访问等操作, 将会在Log console输出一些警告, 警告信息包含Stack Trace来显示哪个地方出了问题.
1.1.2 文档
点我直达
1.1.3 作用
主要用来做主线程优化分析
1.2 Systrace
1.2.1 说明
Systrace是一个收集和检测时间信息的工具, 它能显示CPU和时间被消耗在哪儿了, 每个进程和线程都在其CPU时间片内做了什么事儿. 而且会指示哪个地方出了问题, 以及给出Fix建议.
其以trace文件(html)的方式记录. 可以直接用Chrome浏览器打开查看. 界面如下:
1.2.2 文档
- systrace.html
- systrace-walkthru.html
- systrace-commandline.html?hl=fy
1.2.3 作用
- 作用很多, 个人主要用来分析UI的绘制时间, 结合Hierarchy Viewer来提升UI性能.
- 也可以用来发现耗时操作.
1.3 Hierarchy Viewer
Hierarchy Viewer需要Root的机器(产品机没有开启ViewServer)才可以执行. 可以使用第三方的开源的ViewServer来协助我们在未Root的机器上使用Hierarchy Viewer分析.
1.3.1 说明
Hierarchy Viewer提供了一个可视化的界面来观测布局的层级, 让我们可以优化布局层级, 删除多余的不必要的View层级, 提升布局速度。
有必要说明下的是:
上图红框标出的三个点是关键分析数据. 左起依次代表View的Measure, Layout和Draw的性能. 另外颜色表示该View的该项时间指数, 分为:
- 绿色, 表示该View的此项性能比该View Tree中超过50%的View都要快.
- 黄色, 表示该View的此项性能比该View Tree中超过50%的View都要慢.
- 红色, 表示该View的此项性能是View Tree中最慢的.
1.3.2 文档
- hierarchy-viewer.html
- hierarchy-viewer-walkthru.html
- hierarchy-viewer-setup.html
- optimize-ui.html#HierarchyViewer
1.3.3 作用
用来做View层级分析, 可以分析出View Tree中的性能阻塞点, 以便对症下药, 提升布局性能.
1.4 TraceView
1.4.1 说明
一个图形化的工具, 用来展示和分析方法的执行时间.
1.4.2 文档
- traceview.html
- traceview-walkthru.html
1.4.3 作用
分析方法调用栈以及其执行时间, 优化方法执行.
1.5 Memory Monitor
1.5.1 说明
内存使用检测器, 可以实时检测当前Application的内存使用和释放等信息, 并以图形化界面展示.
1.5.2 文档
- am-memory.html
- heap-viewer-walkthru.html
- allocation-tracker-walkthru.html
1.5.3 作用
- 用来做内存分析, 内存泄露排查的不二之选. 可以结合heap viewer, allocation tracker来分析.
- 可以导出hprof文件结合第三方的MAT工具分析泄露点.
1.6 Other Monitor
1.6.1 说明
Android Studio的Monitor还提供了其他三个Monitor --- CPU, GPU, Network.
1.6.2 文档
- am-cpu.html
- am-gpu.html
- am-network.html
1.6.3 作用
分别用来跟踪监测CPU,GPU和Network的使用极其变化, 可以作为网络优化, 流量优化和渲染优化等的一个指导. (个人并不常用到~)
1.7 其他
Android的开发者模式中也提供了较多的用来监测性能的选项, 可以用下:
二、第三方工具
以下工具全部开源, 开源万岁...
2.1 Google的Battery Historian
2.1.1 说明
Google出品, 通过Android系统的bugreport文件来做电量使用分析的工具.
2.1.2 文档
- https://github.com/google/battery-historian
2.1.3 作用
用来做电量使用分析.
2.2 网易的
2.2.1 说明
针对Android App的CPU, 内存, 网络, 电量等多项综合的测试分析.
2.2.2 文档
- https://github.com/NetEase/Emmagee
2.2.3 作用
比官方工具更适合国人使用来做App的整体性能分析.
2.3 Square
2.3.1 说明
- Square出品, 必属精品.
- 类似与App探针的内存泄露监测工具.
2.3.2 文档
- https://github.com/square/leakcanary
2.3.3 作用
集成到App中, 用来做内存问题预防最好不过了.
2.4 AndroidDevMetrics
2.4.1 说明
一个library, 用来检测Activity生命周期执行性能, Dagger2注入性能以及帧率性能的工具.
2.4.2 文档
- https://github.com/frogermcs/AndroidDevMetrics
2.4.2 作用
如果你的应用使用的Dagger2, 这个就比较必要了.
2.5 Lint
2.5.1 说明
Lint 是Android Studio 提供的代码扫描分析工具,它可以帮助我们发现代码结构/质量问题,同时提供一些解决方案,而且这个过程不需要我们手写测试用例。
2.5.2 文档
- 官方文档
- Android Lint官方技术文档翻译
2.5.3 作用
- 优化代码,去除冗余资源
- 发现潜在bug或可优化地方
三、结语
MAT没有侧重的提, 是因为这个工具在ADT时代比较常用, AS2.0之后, 本身的Memory Monitor越来越强大, 结合日益完善的第三方工具基本上可以完成内存方面的优化了.
欢迎大家分享自己常用的App性能分析工具, 共同学习~