Android屏幕刷新机制与Choreographer的工作原理

本文介绍了Android屏幕刷新率和帧率的概念,重点讲解了VSync机制及其对稳定帧率的作用。Choreographer作为关键组件,接收VSync信号并处理UI绘制、输入事件和动画。通过源码分析,揭示了Choreographer如何注册、接收VSync信号、调度任务以及请求VSync的过程,加深了对Android页面刷新机制的理解。
摘要由CSDN通过智能技术生成

正文

刷新率:代表一秒内屏幕刷新的次数,大部分手机的刷新率为60Hz,即一秒刷新60次,所以大概就是16.6ms刷新一次,这个是由硬件的参数决定的。

帧率:相信开发客户端的同学都听说过FPS,也就是帧率。帧率代表一秒内绘制的帧数,当某个页面或者某个操作的帧率比较低时,也就是出现丢帧的情况(没法在16.6ms内完成工作),有可能就会出现卡顿。

Android通过VSync来确保帧率的稳定,VSync是Vertical Synchronization(垂直同步)的缩写,它主要用来出发界面的更新绘制、处理用户的输入等操作,系统会定时发送Vsync信号,也就是16ms发送一次,在Android4.1开始引入Vsync机制。

我们通过下面两张图来看看VSync机制。

正常的Vsync机制:

发生卡顿:

(图片来源于网络,如有侵权请联系删除)

以上两张图如何理解:

正常帧:1、2、3、4每一帧内都能够计算完成,并且得到展示,给用户。

掉帧:第一帧的时候,B没能计算完成,所以第二帧继续展示A,直到第三帧才能展示出B,但A却不能在第三帧计算完成,所以第四帧继续展示的是B,就出现了掉帧的情况,可能给用户带来卡顿的感觉。

看完上图,可能会带来对问题是Vsync怎么去触发到具体页面的绘制等响应的呢?有个重要的类Choreographer,Vsync通过去唤醒Choreographer,然后它进行一系列的处理,比如输入事件、控件的更新等等,同时Choreographer也会进行请求Vsync信号。接下来就来看看Choreographer这个类是怎么样的。

除了VSync信号,Choreographer起到了很大的作用,假设没有Vsync跟Choreographer,那么每当渲染完一帧,那么下一帧就接着开始渲染,这导致了不稳定的情况。它们的存在便能够保证帧率的稳定,让用户的体验更好。

Choreographer通过接收Vsync的信号,进而对app的一些绘制、用户输入事件、动画等做处理,这些都是在onVsync回调方法里边进行统一的处理;同时它也负责对Vsync信号的请求。接下来,我们通过源码来了解它的工作原理。

1.注册:

我们都知道,每当要接收某个回调事件,都需要提前进行注册。Choreographer是怎么去进行注册的呢?

在了解之前,我们先看看Choreographer是怎么被创建出来的:

public static Choreographer getInstance() {
    return sThreadInstance.get();
}
private static final ThreadLocal<Chor
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值