在Choreographer内部有系统自带的卡帧警告,在Choreographer内部的doFrame()方法中,当这一帧与上一帧的间隔大于SKIPPED_FRAME_WARNING_LIMIT时会在info里打出log。

android 系统自带的卡帧警告

    SKIPPED_FRAME_WARNING_LIMIT是Choreographer内部的静态变量,从SystemProperties中取出,如果没有的话默认值是30,我在模拟器Pixel xl中检测也是30。

android 系统自带的卡帧警告

android 系统自带的卡帧警告

      但是注意,这是这一帧与上一帧的间隔,如果在主线程中连续出现几个小于30帧的卡顿,视觉上也会比较卡,毕竟1s60帧的话,20帧卡顿已经有333ms了,当连续出现两个基本上1s内都在卡顿。

      从测试的结果来看基本上都在刚打开页面上出现,毕竟网络请求处理数据什么的以及刚开始的ui绘制是比较耗时的,而从Choreographer的代码来看是没有首帧判断的,这一点不如Android7.0 之后 的Window.FrameMetricsListener,但这是系统自带的,不需要任何的代码实现。

相关文章: