常日好读书,晚年学垂纶。html
60fps:画面每秒刷新60次,一帧的时间就是1/60 ~=16.67msandroid
刷新率:每秒屏幕刷新次数,如今大部分手机屏幕的刷新率是60HZ 帧率:GPU在一秒内绘制的帧数。git
现阶段,Android的帧率是60fps(16.67ms绘制一次),而手机的屏幕刷新率是60HZ(16.67ms刷新一次),因此目前的Android手机基本是这个配置,目前阶段的最优解。github
Android系统每16ms发出VSYNC信号,触发GPU对UI渲染,若是你的耗时是20ms,系统在获得VSYNC信号的时候因为还没准备好,就没法进行更新任何内容,那么用户在32ms内看到的是同一帧画面,就丢帧了,会有卡顿现象。性能优化
Android Studio 4.0 Gradle version 6.1.1 Android API version 30markdown
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
ide
打开运行的systrace结果报表:oop
键盘快捷键:
W :放大跟踪时间轴
A :在跟踪时间轴上向左平移
S :缩小跟踪时间轴
D :在跟踪时间轴上向右平移
E :以当前鼠标位置为中定位跟踪时间轴
M :高亮当前选区
post
界面管道颜色说明:
灰色:正在休眠。
蓝色:可运行(它能够运行,可是调度程序还没有选择让它运行)。
绿色:正在运行(调度程序认为它正在运行)。
红色:不可中断休眠(一般在内核中处于休眠锁定状态)。能够指示 I/O 负载,在调试性能问题时很是有用。
橙色:因为 I/O 负载而不可中断休眠。
性能
点击单帧详情,会提示卡顿的详细信息以及建议。
荷花宫样美人妆,荷叶临风翠做裳
❤ 比心 ❤