面试复习题--绘制原理

1、屏幕刷新参与者

画笔 Skia : CPU 绘制 2D 图形;Open GL : GPU 绘制 2D / 3D 图形;
画纸 Surface : Android 4.4+ 应用程序都在 Surface 这张画纸上进行绘制和渲染。
画板 Graphic Buffer : 在屏幕刷新机制提到,Android 4.1+ 后有 3 块 Graphic Buffer 用于应用程序图形绘制,或 SurfaceFlinger 的合成和显示。
合成及显示 SurfaceFlinger : 合成所有图层并进行显示。(Surface 的投递者)

Android绘制流程 - 走看看

2、VSYNC垂直同步信号

显示系统中一般包括CPU、GPU、display三个部分,CPU一般负责计算数据,然后把计算好的数据交给GPU,GPU会对这些图形数据进行渲染,渲染后放在buffer里面存起来,最后display负责将buffer里的数据呈现到显示器中。Android的刷新频率是60帧/秒,Android系统中每隔16.6ms会发送一次VSYNC(同步)信号,有可能会触发UI的渲染。

 流程

1)界面上任何一个View的刷新请求最终都会走到ViewRootImpl#scheduleTraversals()里来安排一次遍历绘制View树的任务
(2)首先,scheduleTraversals()会先过滤掉同一帧内的重复调用,确保同一帧内只需要安排一次遍历绘制View树的任务,遍历过程中会将所有需要刷新的View进行重绘
(3)然后,scheduleTraversals()会往主线程的消息队列中发送一个同步屏障,拦截这个时刻之后所有的同步消息的执行,但不会拦截异步消息,以此来尽可能的保证当接收到屏幕刷新信号时可以第一时间处理遍历绘制View树的工作
(4)发完同步屏障后,scheduleTraversals()将performTraversals()封装到Runnable里面,然后调用Choreographer#postCallback()方法
(5)postCallback()方法会先将这个Runnable任务以当前时间戳放进一个待执行的队列里,然后如果当前是在主线程就会直接调用一个native层方法,如果不是在主线程,会发一个最高优先级的message到主线程,让主线程第一时间调用这个native层的方法
(6)native层的这个方法是用来向底层订阅下一个屏幕刷新信号Vsync,当下一个屏幕刷新信号发出时,底层就会回调Choreographer#onVsync()方法来通知上层app
(7)onVsync()方法被回调时,会往主线程的消息队列中发送一个执行doFrame()方法的异步消息
(8)doFrame()方法会去取出之前放进待执行队列里的任务来执行,取出来的这个任务实际上是ViewRootImpl#doTraversal()在操作
(9)doTraversal()中首先会移除同步屏障,再调用performTraversals()方法,根据当前状态判断是否需要执行performMeasure()测量、perfromLayout()布局、performDraw()绘制流程,在这几个流程中都会去遍历View树来刷新需要更新的View
(10)等到下一个Vsync信号到达,将上面计算好的数据渲染到屏幕上,同时如果有必要开始下一帧的数据处理。

3、SuerfaceView刷新原理

View通过刷新来重绘视图,Android系统通过发出VSYNC信号来进行屏幕的重绘,刷新的时间间隔为16ms​​​​​​​。​​​​​​​在一些需要频繁刷新,执行很多逻辑操作的时候,超过了16ms,就会导致卡顿。

SurfaceView继承之View,但拥有独立的绘制表面,即它不与其宿主窗口共享同一个绘图表面,可以单独在一个线程进行绘制,并不会占用主线程的资源。这样,绘制就会比较高效,游戏,视频播放,还有最近热门的直播,都可以用SurfaceView。SurfaceView有两个子类GLSurfaceViewVideoView

SurfaceViewView的区别:

  1. View主要适用于主动更新的情况下,而SurfaceView主要适用于被动更新,例如频繁地刷新
  2. View在主线程中对画面进行刷新,而SurfaceView通常会通过一个子线程来进行页面的刷新
  3. View在绘图时没有使用双缓冲机制,而SufaceView在底层实现机制中就已经实现了双缓冲机制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为-原理绘制评审规范-checklist是华为公司为了确保原理绘制质量和准确性而制定的指南。以下是一份可能的评审规范-checklist: 1. 原理图符号准确性:检查原理图中的各个元件符号是否正确,包括器件、连接线、电源等。确保符号与实际元件相对应,并且没有错误或遗漏。 2. 连接线规范:检查连接线的走向是否符合设计要求,并且没有交叉、断开或不必要的交叉。确保连接线的长度合适且整齐,以提高信号传输的质量。 3. 电源规划:检查电源的布局和规划是否符合设计要求,包括电源线的位置和连接方式。确保每个器件都能得到足够的电源供应,以避免电源噪声或干扰。 4. 阻抗匹配:检查原理图中的阻抗匹配电路是否正确,并且与设计规格相符。确保各个信号路径的阻抗匹配良好,以提高信号传输的稳定性和可靠性。 5. 信号完整性:检查原理图中的信号传输路径是否正确,并且没有信号路径交叉、误接或不必要的延迟。确保信号的传输路径短、直接,并且能够保持信号的完整性和稳定性。 6. 地线和功率线分离:检查原理图中的地线和功率线是否分离,并且没有交叉或干扰。确保地线和功率线的分离可以减少干扰和噪声,提高系统的稳定性和性能。 总之,华为-原理绘制评审规范-checklist旨在确保原理图的准确性、规范性和可靠性,以提高华为产品的质量和性能。通过逐项检查每个要素,可以及时发现和纠正潜在的问题,确保原理图符合设计规格,并满足客户的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值