(五) 下篇 Android 性能优化 Systrace文件分析
2020-07-06 本文已影响0人
科技猿人
小酌鸡汤
常日好读书,晚年学垂纶。
本文来源《Android 性能优化 全家桶》
什么是60fps?
60fps:画面每秒刷新60次,一帧的时间就是1/60 ~=16.67ms
刷新率 vs 帧率?
刷新率:每秒屏幕刷新次数,现在大部分手机屏幕的刷新率是60HZ
帧率:GPU在一秒内绘制的帧数。
为什么是60fps?
现阶段,Android的帧率是60fps(16.67ms绘制一次),而手机的屏幕刷新率是60HZ(16.67ms刷新一次),所以目前的Android手机基本是这个配置,目前阶段的最优解。
为什么会卡顿丢帧?
Android系统每16ms发出VSYNC信号,触发GPU对UI渲染,如果你的耗时是20ms,系统在得到VSYNC信号的时候由于还没准备好,就无法进行更新任何内容,那么用户在32ms内看到的是同一帧画面,就丢帧了,会有卡顿现象。
Systrace的 文件分析 实操开始吧~
(1)systrace实操环境(可选项,用自己的环境和代码也一样)
- SamplePop代码下载
- SamplePop环境如下:
Android Studio 4.0
Gradle version 6.1.1
Android API version 30
(2)SamplePop示例代码:
public void onFramesLossMonitor(View view) {
Log.d(TAG, "onFramesLossMonitor: ");
startAnimator();
}
private void startAnimator() {
Log.d(TAG, "startAnimator: ");
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1f);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mMonitorBgView.setAlpha((float) animation.getAnimatedValue());
monitorDoSomeThings();
}
});
valueAnimator.setDuration(500);
valueAnimator.start();
}
private void monitorDoSomeThings() {
Log.d(TAG, "monitorDoSomeThings: ");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
Log.d(TAG, "writeSomething: ");
}
}
按照上篇讲述的方法,导出html文件报表,找到对应包名的进程,查看Frames
,表明有卡顿(丢帧)。
绿色:< 1* vsync
黄色:1 * vsync ~ 2 * vsync之间
红色:> 2 * vsync
(3)打开运行的systrace结果报表:

键盘快捷键:
W :放大跟踪时间轴
A :在跟踪时间轴上向左平移
S :缩小跟踪时间轴
D :在跟踪时间轴上向右平移
E :以当前鼠标位置为中定位跟踪时间轴
M :高亮当前选区
界面管道颜色说明:
灰色:正在休眠。
蓝色:可运行(它可以运行,但是调度程序尚未选择让它运行)。
绿色:正在运行(调度程序认为它正在运行)。
红色:不可中断休眠(通常在内核中处于休眠锁定状态)。可以指示 I/O 负载,在调试性能问题时非常有用。
橙色:由于 I/O 负载而不可中断休眠。
(4)查看单帧信息:

点击单帧详情,会提示卡顿的详细信息以及建议。
小编的扩展链接
参考链接
荷花宫样美人妆,荷叶临风翠作裳

举手之劳,赞有余香! ❤ 比心 ❤