AndroidStudio 性能分析工具

AndroidStudio 中集成了常用的性能分析工具,可以使用它们来进行性能分析。

AndroidStudio性能分析工具

optimize_util

AndroidStudio 给开发者提供了App的内存占用,CPU使用率,Network请求等直观数据,如果用户有打开页面,请求网络等操作,可以直接看到变化。

1.内存分析

hrpof

Android内存分配机制是对每个应用程序逐步增加, 比如你程序当前使用30M内存, 系统可能会给你分配40M, 当前就有10M空闲,系统如果不能再给你分配额外的内存,程序自然就会OOM(内存溢出)了。 每个应用程序最高可以申请的内存和手机密切相关,有的手机只有可怜的16M或者32M,这样的手机相对于内存溢出的概率非常大了。

内存泄漏分析

内存泄露就是指,本应该回收的内存,还驻留在内存中。一般情况下如果发现退出界面,程序内存迟迟不降低的话,可能就发生了严重的内存泄露。此时先发起一次GC内存回收然后反复进入该界面,然后点击Dump java heap这个按钮,然后 AndroidStudio 便开始收集堆内存信息了,收集完成后会保存到 hprof 文件中。

hprof: Heap/CPU of Profiling(简要描述)

hprof 文件分析

  1. 直接使用 AndroidStudio 查看,参考:hprof 文件分析
  2. 使用 MAT 内存分析工具查看;

2.Allocation Tracker

Android Monitor 可以收集app中的内存使用情况,Allocation Tracker 可以使我们观察到对象在什么地方被创建,以及对象对占用的占用情况。比如一张图片被在常驻在内存中,我们可以找到该图片的加载位置从而进行优化。
使用 Allocation Traker 来查看内存到底被什么占用了,点一次开始,第二次点击的时候则停止,停止之后信息自动保存到 .alloc 文件中。

hrpof

如果想查看某个方法的源码,右键选择的方法,点击Jump to source。

参考

3.TraceView

TraceView 是 Android 平台配备一个很好的性能分析的工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到 method。它主要用于分析 Android 中应用程序的 hotspot。TraceView 本身只是一个数据分析工具,而数据的采集则需要使用 Android SDK 中的 Debug 类或者利用 DDMS 工具。二者的用法如下:

1. MethodTracing

开发者在一些关键代码段开始前调用 Android SDK 中 Debug 类的 startMethodTracing 函数,并在关键代码段结束前调用 stopMethodTracing 函数。这两个函数运行过程中将采集运行时间内该应用所有线程(注意,只能是 Java 线程)的函数执行情况,并将采集数据保存到 /mnt/sdcard/ 下的一个文件中。开发者然后需要利用 SDK 中的 TraceView 工具来分析这些数据。

2. DDMS

借助 Android SDK 中的 DDMS 工具。DDMS 可采集系统中某个正在运行的进程的函数调用信息。

列名含义:

  • Incl Cpu Time :函数占用的 CPU 时间,包含内部调用其它函数的 CPU 时间
  • Excl Cpu Time :函数占用的 CPU 时间,但不包含内部调用其它函数的 CPU 时间
  • Incl Real Time :函数运行的真实时间,包含内部调用其它函数的真实时间
  • Excl Real Time :函数运行的真实时间,不包含内部调用其它函数的真实时间
  • Call+Recur Calls/Total :函数被调用次数以及递归调用占总调用次数的百分比
  • Cpu Time/Call :函数调用 CPU 时间与调用次数比,即该函数平均执行时间
  • Real Time/Call :函数调用真实时间与调用次数比,即该函数平均执行的真实时间

optimize_util

从上图中,可以看到各个方法所占用CPU的时间,如果在某个页面发生卡顿,则可以通过收集 method trace 信息,然后进行分析,查看耗时间比较长的方法,进行优化操作。

hotspot

hotspot 包括两种类型的函数:

  1. 调用次数不多,但每次调用却需要花费很长时间的函数。
  2. 自身占用时间不长,但调用却非常频繁的函数。

测试背景:APP 在测试机运行一段时间后出现手机发烫、卡顿、高 CPU 占有率的现象。将应用切入后台进行 CPU 数据的监测,结果显示,即使应用不进行任何操作,应用的 CPU 占有率都会持续的增长。

按照 TraceView 简介中的方法进行测试,TraceView 结果 UI 显示后进行数据分析,在 Profile Panel 中,选择按 Cpu Time/Call 进行降序排序。

参考1
参考2
参考3