这是我参与「第四届青训营 」笔记创作活动的第14天
本节课的主要内容:Android最佳优化工具选型
1,性能监控工具的价值
App的性能问题包括崩溃、网络请求错误或超时、响应速度慢、列表滚动卡顿、流量大、耗电等等。而导致App性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线程、锁、系统函数、编程范式、数据结构等导致的。即便是最有经验的程序员,也很难在开发时就能避免所有导致性能低下的“坑”,因此解决性能问题的关键是在于能不能尽早地发现和定位这些“坑”。
2,Gpu呈现模式
- 在图 1 中显示的 GPU 渲染模式分析图形的放大图像中,您可以看到 Android 6.0(API 级别 23)上显示的彩色部分。
-
图 1. 放大的 GPU 渲染模式分析图形。 下面是有关输出的几点注意事项:
-
对于每个可见应用,该工具将显示一个图形。
-
沿水平轴的每个竖条代表一个帧,每个竖条的高度表示渲染该帧所花的时间(以毫秒为单位)。
-
水平绿线表示 16 毫秒。要实现每秒 60 帧,代表每个帧的竖条需要保持在此线以下。当竖条超出此线时,可能会使动画出现暂停。
-
该工具通过加宽对应的竖条并降低透明度来突出显示超出 16 毫秒阈值的帧。
-
每个竖条都有与渲染管道中某个阶段对应的彩色区段。区段数因设备的 API 级别不同而异。 下表介绍了使用运行 Android 6.0 及更高版本的设备时分析器输出中某个竖条的每个区段。
3,Layertool
抖音自研工具,快速识别图层及过度绘制、绘制区域过大等问题,提升整体渲染效率.
4,CPU Profiler
如需打开 CPU 性能剖析器,请按以下步骤操作:
- 依次选择 View > Tool Windows > Profiler 或点击工具栏中的 Profile 图标
- 如果 Select Deployment Target 对话框显示提示,请选择需将您的应用部署到哪个设备上以进行性能剖析。如果您已通过 USB 连接设备但系统未列出该设备,请确保您已启用 USB 调试。
- 点击 CPU 时间轴上的任意位置以打开 CPU 性能剖析器。
- 当您打开 CPU 性能分析器时,它会立即开始显示应用的 CPU 使用率和线程活动。系统会显示类似于图 1的界面。
图 2. CPU 性能分析器中的时间轴。
如图 2 所示,CPU 性能分析器的默认视图包括以下时间轴:
-
事件时间轴:显示应用中的 activity 在其生命周期内不断转换经历各种不同状态的过程,并指示用户与设备的交互,包括屏幕旋转事件。如需了解如何在搭载 Android 7.1(API 级别 25)及更低版本的设备上启用事件时间轴,请参阅启用高级性能分析功能。
-
CPU 时间轴:显示应用的实时 CPU 使用率(以占总可用 CPU 时间的百分比表示)以及应用当前使用的线程总数。此时间轴还会显示其他进程(如系统进程或其他应用)的 CPU 使用率,以便您可以将其与您应用的 CPU 使用率进行对比。您可以通过沿时间轴的横轴方向移动鼠标来检查历史 CPU 使用率数据。
-
线程活动时间轴:列出属于应用进程的每个线程,并使用下面列出的颜色在时间轴上指示它们的活动。记录轨迹后,您可以从此时间轴上选择一个线程,以在轨迹窗格中检查其数据。
- 绿色:表示线程处于活动状态或准备使用 CPU。也就是说,线程处于正在运行或可运行状态。
- 黄色:表示线程处于活动状态,但它正在等待一项 I/O 操作(如磁盘或网络 I/O),然后才能完成它的工作。
- 灰色:表示线程正在休眠且没有消耗任何 CPU 时间。 当线程需要访问尚不可用的资源时,就会出现这种情况。在这种情况下,要么线程主动进入休眠状态,要么内核将线程置于休眠状态,直到所需的资源可用。
-
CPU 性能分析器还会报告 Android Studio 和 Android 平台添加到应用进程的线程的 CPU 使用率,这些线程包括
JDWP、Profile Saver、Studio:VMStats、Studio:Perfa和Studio:Heartbeat等(不过,它们在线程活动时间轴上显示的确切名称可能有所不同)。Android Studio 报告此数据是为了方便您确定线程活动和 CPU 使用率什么时候是由应用的代码实际引发的。
5,TraceView
如需通过 Android Studio 中的 Traceview 打开跟踪日志,请按以下步骤操作:
-
在 Android Device Monitor 中,依次选择 File > Open File。
-
转到您要检查的
.trace文件。 -
点击 Open。
打开跟踪日志后,Traceview 会使用以下两个窗格显示日志数据:
- 时间轴窗格,说明每个线程何时进入和退出某个方法
- 剖析窗格,总结每个线程在跟踪日志期间的执行情况
以下各部分进一步介绍了 Traceview 的输出窗格。
时间轴窗格
- 图3显示了时间轴窗格的特写。每个线程的执行情况都显示在各自的行中,并且越往右使用的时间越长。每个方法都以不同的颜色显示。第一行下面的细线显示所选方法的子级(从进入到退出)。
- 图 3. Traceview 时间轴窗格。
分析窗格
如图 4 所示,剖析窗格列出了跟踪日志期间执行的各个方法以及执行这些方法所用的时间。调用另一个方法的方法称为父级,父级调用的方法称为其子级。当您通过点击某个方法以选择该方法时,它会在两个单独的节点下同时显示其父级和子级。
对于每个方法(顶级节点),该表会显示其非独占时间和独占时间(以毫秒为单位)以及占总时间的百分比。独占时间是执行方法自身代码所用的时间,而非独占时间则是执行方法自身代码所用时间与执行其子级代码所用时间之和。系统还会根据 CPU 时间和实际时间报告用时信息。CPU 时间仅考虑线程主动使用 CPU 的时间,而实际时间则提供从应用进入方法到退出该方法这整个过程(无论线程处于活动状态还是休眠状态)的绝对用时信息。
- 对于分析窗格中的每个顶级节点,表中的 Calls + Rec, Calls/Total 列(图 4 中未显示)会报告对相应方法的调用次数和递归调用的次数。而对于父方法和子方法,此列会显示被调用方法为顶级节点中方法的子级或父级的调用次数。
图 4. Traceview 分析窗格。
6,Systrace
systrace 命令会调用 Systrace 工具,您可以借助该工具收集和检查设备上在系统一级运行的所有进程的时间信息。
本文档说明了如何通过命令行生成 Systrace 报告。在搭载 Android 9(API 级别 28)或更高版本的设备上,您还可以使用“系统跟踪”系统应用生成 Systrace 报告。
如需运行 systrace,请完成以下步骤:
- 从 Android Studio 下载并安装最新的 Android SDK 工具。
- 安装 Python 并将其添加到工作站的
PATH环境变量中。
- 将
android-sdk/platform-tools/添加到PATH环境变量。此目录包含由systrace程序调用的 Android 调试桥二进制文件 (adb)。
- 使用 USB 调试连接将搭载 Android 4.3(API 级别 18)或更高版本的设备连接到开发系统。
systrace 命令在 Android SDK 工具软件包中提供,并且可以在 android-sdk/platform-tools/systrace/ 中找到。
语法
如需为应用生成 HTML 报告,您需要使用以下语法通过命令行运行 systrace:
python systrace.py [options] [categories]