Android性能分析之 Profiler

Android studio的分析工具分为:CPU、Memory、NetWork、Energy.

CPU Profiler:

从Android profiler面板选择指定设备和应用程序进入到CPU Profiler界面,我们能够直观的看到CPU的使用情况和线程的情况.


Android性能分析之 Profiler_第1张图片
image.png

分别介绍下相关标号的CPU Profiler的相关功能:
1.事件时间轴:表示当前分析的应用程序随着用户交互在不同活动的变化状态 .
2.CPU状态:表示当前应用CPU使用率和系统及其他的CPU使用率.
3.线程活动时间轴:列出当前应用的所有线程,并标识出其在时间轴上的状态.

绿色:线程处于运行状态或者是可运行状态;
黄色:线程处于活动状态,它正在等待I / O操作完成后继续工作;
灰色:线程处于休眠状态,不会占用任何 CPU 时间.

4.方法跟踪配置:选择方法跟踪的模式:
Sampled:一种基于数据抽样的跟踪,分析器会在应用执行期间频繁地捕获应用程序的调用堆栈,通过收集比对捕获到的数据集来获得有关应用程序代码执行的时间和资源使用信息,适合跟踪生命周期相对较长的方法,如果应用在捕获调用堆栈后进入一个函数并在下一次捕获前退出该函数,则分析器不会记录该函数调用.
Instrumented: 以函数调用时间为周期记录,在运行时设置应用以在每个函数调用的开始和结束时记录时间戳,它收集时间戳并进行比较,以生成函数跟踪数据,包括时间信息和 CPU 使用率.与设置每个函数关联的开销会影响运行时性能,并可能会影响分析数据,对于生命周期相对较短的函数,这一点更为明显.如果应用短时间内执行大量函数,则分析器可能会迅速超出它的文件大小限制,且不能再记录更多的跟踪数据。
Edit configurations:允许更改上述“Sampled”和“Instrumented”记录配置的某些默认值,并将它们另存为自定义配置。
5. 用于开始和停止记录函数跟踪.
6.放大/缩小时间线
7.跳转至实时时间线

记录、检查函数跟踪

在4处选择Sampled或者Instrumented,然后在5处开始记录函数跟踪,再结束函数跟踪:

Android性能分析之 Profiler_第2张图片
image.png

从图中可以发现有四种方式检查函数跟踪:
Call Chart
水平轴表示函数调用(或调用方)的时间,并沿垂直轴显示其被调用者。 对系统 API 的函数调用显示为橙色,对应用自有函数的调用显示为绿色,对第三方 API(包括 Java 语言 API)的函数调用显示为蓝色。 下图展示了一个调用图表示例,并描绘了给定函数的 Self time、Children time 以及总时间的概念。
相关函数可以右键Jump to source.
Flame Chart
Flame Chart 标签提供一个倒置的调用图表,其中水平轴不再代表时间线,它表示每个函数相对的执行时间。
Android性能分析之 Profiler_第3张图片
image.png

Top Down
Top Down 标签显示一个函数调用列表,在该列表中展开函数节点会显示函数的被调用方.
Android性能分析之 Profiler_第4张图片
image.png

左边显示了函数调用列表,右边分别显示了函数执行时间和函数执行的被调用方所花时间,和总时间.
Bottom Up
标签显示一个函数调用列表,在该列表中展开函数节点将显示函数的调用方.
Android性能分析之 Profiler_第5张图片
image.png

Memory Profiler:

内存分析,根据进入内存分析界面,先介绍CPU界面没有的指标:

Android性能分析之 Profiler_第6张图片
image.png

1:用于强制内存回收.
2:抓取进程内存的dump信息.
3:内存分配的占比及对象个数.
4:虚线表示对象的分配数.
5:拉动时间线选取待分析的时间段的内存信息.
6:内存信息.
从6中可以观察到类的信息,点击相关类可以观察到对象信息,点击相关实例,可以观察到调用栈信息,点击调用栈可以跳转至相关代码.

内存分配:
可以查看的信息:分配哪些类型的对象以及它们使用多少空间,每个分配的堆叠追踪,包括在哪个线程中,对象在何时被取消分配(Android 8.0+)。

捕获堆转储

堆转储显示在捕获堆转储时应用中哪些对象正在使用内存,尤其是在长时间的用户会话后,堆转储会显示您认为不应再位于内存中却仍在内存中的对象,从而识别内存泄漏,在捕获堆转储后,可以查看以下信息:

应用已分配哪些类型的对象,以及每个类型分配多少;每个对象正在使用多少内存;在代码中的何处仍在引用每个对象;对象所分配到的调用堆栈(目前,如果在记录分配时捕获堆转储,则只有在 Android 7.1 及更低版本中,堆转储才能使用调用堆栈)

要捕获堆转储,在 Memory Profiler 工具栏中点击 Dump Java heap ,在转储期间,Java 内存量可能会暂时增加,这很正常,因为堆转储与您的应用发生在同一进程中,并需要一些内存来收集数据。


Android性能分析之 Profiler_第7张图片
image.png

在类列表中,可以查看以下信息:

Shallow Size:此堆中所有实例的总大小(以字节为单位)。
Retained Size:为此类的所有实例而保留的内存总大小(以字节为单位)

在类列表顶部,可以使用左侧下拉列表在以下堆转储之间进行切换:

Default heap:系统未指定堆时。
App heap:应用在其中分配内存的主堆。
Image heap:系统启动映像,包含启动期间预加载的类。 此处的分配保证绝不会移动或消失
Zygote heap:写时复制堆,其中的应用进程是从 Android 系统中派生的。

默认情况下,此列表按 Retained Size 列排序,可以点击任意列标题以更改列表的排序方式。
在 Instance View 中,每个实例都包含以下信息:

Depth:从任意 GC root 到所选实例的最短 hop 数。
Shallow Size:此实例的大小。
Retained Size:此实例支配的内存大小。

将堆转储另存为 HPROF

右键将堆转储导出到一个 HPROF 文件中,在显示的对话框中,确保使用 .hprof 后缀保存文件;然后,通过将此文件拖到一个空的编辑器窗口就可以在 Android Studio 中打开该文件。
要使用其他 HPROF 分析器(如 jhat),需要将 HPROF 文件Android 格式转换为 Java SE HPROF 格式。 可以使用 android_sdk/platform-tools/ 目录中的 hprof-conv 工具执行此操作。 运行该命令需要两个参数:原始 HPROF 文件和转换后 HPROF 文件的写入位置。 例如:
hprof-conv heap-original.hprof heap-converted.hprof

Network Profiler

时间线上显示实时网络 Activity,包括发送和接收的数据以及当前的连接数,便于查看应用传输数据的方式和时间,并据此对底层代码进行适当优化。


Android性能分析之 Profiler_第8张图片
image.png

选择相应的时间段,对网络的请求,响应和调用栈以及网络状况进行分析.

Energy Profiler

打开Energy Profiler时,它会立即开始显示应用程序的估计能耗:查看CPU,网络和位置(GPS)资源以及相关系统事件的能耗分类,请将鼠标指针放在 能源时间轴中的条上


Android性能分析之 Profiler_第9张图片
image.png

你可能感兴趣的:(Android性能分析之 Profiler)