心里种花,人生才不会荒芜,如果你也想一起成长,请点个关注吧。
Android 的渲染显示是一个复杂的过程,涉及多个系统组件和层次。为了理解帧率、掉帧和卡顿的原理,我们需要深入了解 Android 的渲染体系。
1、 应用程序层:
View
和 ViewGroup
,初始化和更新 UI 组件。这些组件最终被绘制在屏幕上。2、 UI 线程和 View 渲染:
3、 Choreographer:
Choreographer
是一个关键组件,它负责管理帧的生产和消费。它协调应用程序绘制与 VSYNC 信号(垂直同步)的同步,以实现平滑的动画效果。Choreographer
会在 VSYNC 信号到来时触发 doFrame
回调,在这个回调中完成布局、测量和绘制等操作。4、 硬件加速和 OpenGL:
5、 SurfaceFlinger 和显示:
SurfaceFlinger
是 Android 的系统服务,负责合成窗口,这意味着它把不同应用的窗口和系统 UI 组合在一起并发送到显示屏上。SurfaceFlinger
,它合成最终的显示图像帧。我们可以借助 Choreographer
和 Android API 来检测帧率和掉帧。以下是使用 Choreographer
的一个简单示例:
public class FrameCallback implements Choreographer.FrameCallback {
private long lastFrameTimeNanos = 0;
@Override
public void doFrame(long frameTimeNanos) {
if (lastFrameTimeNanos != 0) {
long frameTime = frameTimeNanos - lastFrameTimeNanos;
double frameTimeMs = frameTime / 1_000_000.0;
if (frameTimeMs > 16.67) {
System.out.println("Frame drop detected: Frame time = " + frameTimeMs + "ms");
}
}
lastFrameTimeNanos = frameTimeNanos;
// Continuously post frame callback
Choreographer.getInstance().postFrameCallback(this);
}
}
// To start tracking frames
public void startTrackingFrames() {
Choreographer.getInstance().postFrameCallback(new FrameCallback());
}
综上,Android 的渲染体系是高度优化和复杂的,要实现流畅的用户体验,需要关注主线程的性能,尽量减少阻塞,并运用合适的工具进行性能监控和优化。
END
点赞转发,让精彩不停歇!关注我们,评论区见,一起期待下期的深度好文!