Android Studio 3.0 及更高版本中的 Android Profiler 取代了 Android Monitor 工具。Android Profiler工具可提供实时数据,帮助您了解应用的CPU、内存、网络和电池资源使用情况。
Android Profiler 显示当前正在分析的进程和设备
在Sessions窗格中,选择要查看的会话,或启动一个新的分析会话
使用缩放按钮控制要查看的时间轴范围,或使用 Attach to live 按钮跳转到实时更新
事件时间轴显示与用户输入相关的事件,包括键盘活动、音量控制变化和屏幕旋转
共享时间轴视图,包括 CPU、内存、网络和耗电量图表
此共享时间轴视图只显示时间轴图表。
使用 CPU 性能分析器在与应用交互时实时检查应用的CPU使用率和线程活动,也可以检查记录的方法轨迹、函数轨迹和系统轨迹的详情。点击上图CPU相关部分图标可进入如下图所示:
显示应用中的 activity在其生命周期内不断转换经历各种不同状态的过程,并指示用户与设备的交互,包括屏幕旋转事件
显示应用的实时 CPU 使用率(以占总可用 CPU 时间的百分比表示)以及应用当前使用的线程总数。此时间轴还会显示其他进程(如系统进程或其他应用)的 CPU 使用率,以便您可以将其与您应用的 CPU 使用率进行对比。您可以通过沿时间轴的横轴方向移动鼠标来检查历史 CPU 使用率数据。
列出属于应用进程的每个线程,并使用下面列出的颜色在时间轴上指示它们的活动。
Callstack Sample Recording(对 C/C++ 函数采样)
捕获应用的原生线程的采样跟踪数据。在内部,此配置使用 simpleperf 跟踪应用的原生代码。
System Trace Recording(跟踪系统调用)
捕获非常翔实的细节,以便您检查应用与系统资源的交互情况。您可以检查线程状态的确切时间和持续时间、直观地查看所有内核的CPU瓶颈在何处,并添加需分析的自定义跟踪事件。
Java/Kotlin Method Trace Recording(跟踪 Java 方法)
在运行时检测应用,从而在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和 CPU 使用率。
请注意,与检测每个方法相关的开销会影响运行时性能,并且可能会影响分析数据;对于生命周期相对较短的方法,这一点更为明显。此外,如果应用在短时间内执行大量方法,则分析器可能很快就会超出其文件大小限制,因而不能再记录更多跟踪数据。
Java/Kotlin Method Trace Recording(对 Java 方法采样)
在应用的 Java 代码执行期间,频繁捕获应用的调用堆栈。分析器会比较捕获的数据集,以推导与应用的 Java 代码执行有关的时间和资源使用信息。
基于采样的跟踪存在一个固有的问题,那就是如果应用在捕获调用堆栈后进入一个方法并在下次捕获前退出该方法,分析器将不会记录该方法调用。如果您想要跟踪生命周期如此短的方法,应使用插桩跟踪。
在菜单中选择记录配置,然后点击 Record
分析结果如下:
图1 :选定范围
确定需在跟踪数据窗格中检查所记录时间的哪一部分。当您首次记录跟踪数据时,CPU 性能剖析器会自动在CPU时间轴上选择记录的完整长度。如需仅检查已记录的时间范围中的一部分的跟踪数据,请拖动突出显示区域的边缘。
图2 :“Interaction”部分
沿着时间轴显示用户互动和应用生命周期事件。
图3 :“Threads”部分
沿时间轴针对每一个线程显示线程状态活动
图4 :“Analysis”窗格
显示您选择的时间范围和线程/方法调用的跟踪数据。在此窗格中,您可以选择如何查看每个堆栈轨迹(使用“Analysis”标签页),以及如何测量执行时间(使用“Time reference”下拉菜单)。
图5 :“Analysis”窗格标签页
选择如何显示跟踪数据详细信息。 Flame Chart、Top Down、Bottom Up 和 Events 标签页
图6 :"Time reference"菜单
Wall clock time:该时间信息表示实际经过的时间。
Thread time:该时间信息表示实际经过的时间减去线程没有占用 CPU 资源的那部分时间。对于任何给定的调用,其线程时间始终小于或等于其挂钟时间。使用线程时间可以让您更好地了解线程的实际 CPU 使用率中有多少是给定方法或函数占用的。
图7 :"Time reference"菜单
按函数、方法、类或软件包名称过滤跟踪数据
如需导入跟踪文件,请在性能剖析器的 Sessions 窗格中点击 Start new profiler session 图标 ,然后选择 Load from file。
如需从 Sessions 窗格导出跟踪文件,在Sessions窗格中,右键点击需导出的记录的跟踪数据。点击会话条目右侧的 Export method trace 或 Export system trace 按钮。浏览到需保存文件的目标位置,指定文件名,然后点击 OK。
出现卡顿通常是因为界面线程(在大多数应用中,它是主线程)上存在一些减速或阻塞异步调用。您可以利用系统轨迹(System Trace Recording)找出问题所在。
利用 System Trace Recording 检查结果如下:
检查卡顿方法:
捕获轨迹后,Android Studio 将显示 Frame Lifecycle 部分
Android Studio 还会在 Frames 标签页中以表格格式显示轨迹中的所有帧。
Frame Duration 列表示从 Application 开始到 Frames on Display开始所经历的时间。这本质上是呈现帧的端到端时长。
检查卡顿方法:
2. 找到运行时间最长的帧,然后选择表中的一行。这将在左侧的时间轴视图中放大所选的帧。