Android Studio 3.0采用全新的Android Profiler窗口取代AndroidMonitor工具。这些全新的分析工具能够提供关于应用CPU、内存和网络Activity的实时数据。可以执行基于样本的函数跟踪来记录代码执行时间、采集堆转储数据、查看内存分配,以及查看网络传输文件的详情。
1.使用CPU性能剖析器检查CPU活动
优化应用的CPU使用率能带来诸多好处,如提供更快、更顺畅的用户体验,以及延长设备电池续航时间。
您可以使用CPU性能分析器在与应用交互时实时检查应用的CPU使用率和线程活动,也可以检查记录的方法轨迹、函数轨迹和系统轨迹的详情。
使用CPU profiler来解决哪些性能问题:
①可以使用CPU profiler来分析CPU耗时问题,解决由于CPU资源消耗而产生的性能问题。
②可以使用CPU profiler来查看主线程中每个方法的耗时情况,以及每个方法的调用栈,可以很方便的分析卡顿产生的原因,以及定位到具体的代码方法。
③可以使用它来进行启动优化分析,查看APP启动时的耗时问题。
④可以使用它来查看线程的执行情况,定位线程的CPU资源占用等问题。
CPU性能分析器记录和显示的详细信息取决于您选择的记录配置:
①System Trace 系统跟踪数据:捕获精细的详细信息,以便检查应用与系统资源的交互情况。
②Method and function traces 方法和函数跟踪数据:对于应用进程中的每个线程,你可以了解一段时间内执行了哪些方法 (Java) 或函数 (C/C++),以及每个方法或函数在其执行期间消耗的 CPU 资源。你还可以使用方法和函数跟踪数据来识别调用方和被调用方。调用方是指调用其他方法或函数的方法或函数,而被调用方是指被其他方法或函数调用的方法或函数。你可以使用此信息来确定哪些方法或函数负责调用常常会消耗大量资源的特定任务,并优化应用的代码以避免不必要的工作。
记录方法跟踪数据时,您可以选择“sampled”或“instrumented”记录。记录函数跟踪数据时,只能使用“sampled”记录。
CPU profiler的使用:
①打开CPU profiler
要打开 CPU Profiler,请按以下步骤操作:
(1)连接真机或虚机设备,确保可以进行ADB调试,依次选择 View > Tool Windows > Profiler 或点击工具栏中的 Profile 图标。
(2)当APP运行起来后,点击 CPU 时间轴上的任意位置以打开 CPU Profiler。
②CPU Profiler视图介绍
当你打开 CPU Profiler 时,它会立即开始显示应用的 CPU 使用率和线程活动。系统会显示类似下图的界面:
CPU Profiler 的默认视图包括以下时间轴(与图中123对应):
(1)事件时间轴:显示应用中的 Activity 在其生命周期内不断转换而经历各种不同状态的过程,并指示用户与设备的交互,包括屏幕旋转事件。
(2)CPU 时间轴:显示应用的实时 CPU 使用率(以占总可用 CPU 时间的百分比表示)以及应用当前使用的线程总数。此时间轴还显示其他进程(如系统进程或其他应用)的 CPU 使用率,以便您可以将其与您应用的使用率进行对比。您可以通过沿时间轴的水平轴移动鼠标来检查历史 CPU 使用率数据。
(3)线程活动时间轴:列出属于应用进程的每个线程,并使用下面列出的颜色在时间轴上指示它们的活动。记录跟踪数据后,您可以从此时间轴上选择一个线程,以在跟踪数据窗格中检查其数据。
绿色:表示线程处于活动状态或准备使用 CPU。也就是说,它处于正在运行或可运行状态。
黄色:表示线程处于活动状态,但它正在等待一项 I/O 操作(如磁盘或网络 I/O),然后才能完成它的工作。
灰色:表示线程正在休眠且没有消耗任何 CPU 时间。当线程需要访问尚不可用的资源时,有时会发生这种情况。在这种情况下,要么线程自主进入休眠状态,要么内核将线程置于休眠状态,直到所需的资源可用。
记录跟踪数据:
要开始记录跟踪数据,请从 CPU Profiler 顶部的下拉菜单中选择记录配置,然后点击 Record。
如图,CPU Profiler 显示了正在进行的记录的状态、持续时间和类型:
与您的应用交互,然后在完成时点击 Stop。性能分析器会自动在轨迹窗格中显示其跟踪信息。
①选定范围:确定要在跟踪数据窗格中检查所记录时间的哪一部分。当您首次记录跟踪数据时,CPU Profiler 会自动在 CPU 时间轴上选择记录的完整长度。要仅检查所记录时间范围的一部分的跟踪数据,请拖动突出显示区域的边缘。
②时间戳:指示所记录跟踪数据的开始和结束时间(相对于分析器开始收集 CPU 使用率信息的时间)。要选择完整的记录,请点击时间戳。
③跟踪数据窗格:显示您选择的时间范围和线程的跟踪数据。只有在您至少记录一条跟踪数据后,才会显示此窗格。在此窗格中,您可以选择如何查看每个堆栈轨迹(使用跟踪数据标签),以及如何测量执行时间(使用时间参考下拉菜单)。
④跟踪数据窗格标签:选择如何显示跟踪数据详细信息。选择以下选项之一,以确定如何测量每次调用的时间信息:
Wall clock time:表示实际经过的时间。
Thread time:时间信息表示实际经过的时间减去线程在该时间内没有消耗 CPU 资源的所有部分。对于任何给定的调用,其线程时间始终小于或等于其挂钟时间。使用线程时间可以让您更好地了解线程的实际 CPU 使用率中有多少是给定方法或函数消耗的。
如何准确的定位到方法:
在线程列表中,选择相应线程,例如main线程,选中后双击展开,这时我们就可以看到详细的方法调用情况以及耗时详情了。
如图:
提示:可以使用键盘按键”W“放大,使用”S"缩小视图;也可以按住ctrl同时滑动滚轮。