iOS构建流畅的交互界面--卡顿产生的原因

本文探讨了iOS设备如何通过双缓冲机制及垂直同步(V-Sync)机制确保流畅的用户体验,同时分析了界面卡顿的原因,并提供了相应的优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[iOS 保持界面流畅的技巧 | Garan no dou](http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/)

确定好Vsync信号产生的时间点,由硬件或软件(某个线程)确定好时间点,然后通知各个模块,每个模块都以系统时间为基点。

 iOS设备双缓冲机制:

显示系统通常会引入两个帧缓冲区,双缓冲机制。
android设备的垂直同步机制:
[Vsync垂直同步信号分发和SurfaceFlinger响应执行渲染流程分析(一) - 红旺永福
- 博客频道 - youkuaiyun.com](http://blog.youkuaiyun.com/sinat_22657459/article/details/52733375)
先判断是否有硬件模块支持,没有硬件模块支持,就启动一个VSyncThread来执行产生垂直同步信号。

  •  由硬件产生:执行初始化时注册硬件回调
  • 由软件产生:
    获取当前时间点和产生信号的时间,计算中间要休眠的时间。
    休眠的时间小于0,说明上一个Vsync信号已经被错过,需要重新计算下一次的Vsync的产生时间:1. 采用定时回调 2. 采用休眠的形式主动等待

画面撕裂现象:
当视频控制器还未读取完成时,即屏幕内容刚显示一半时,GPU 将新的一帧内容提交到帧缓冲区并把两个缓冲区进行交换后,视频控制器就会把新的一帧数据的下半段显示到屏幕上,造成画面撕裂现象。
GPU 垂直同步机制 V-Sync:解决画面撕裂现象:
当开启垂直同步后,GPU 会等待显示器的 VSync 信号发出后,才进行新的一帧渲染和缓冲区更新。这样能解决画面撕裂现象,也增加了画面流畅度,但需要消费更多的计算资源,也会带来部分延迟。

 

界面卡顿的原因:
在Sync信号到来后,系统图形服务会通过CADisplayLink等机制通知App,App主线程开始在CPU中计算显示内容,比如视图的创建,布局计算,图片解码,文本绘制等。随后CPU会将计算好的内容提交到GPU去,由GPU进行交换,合成,渲染。随后GPU会把渲染结果提交到帧缓冲区,等待下一次VSync信号(垂直同步信号)到来时显示到屏幕上。由于垂直同步机制,如果在一个VSync时间内,CPU或者GPU没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏因为没有新的刷新,会保留之前的内容不变。这就造成了卡顿。
总结:掉帧导致了卡顿,而CPU和GPU只要有一个计算速度慢都会导致掉帧(没有在相邻的两个垂直同步信号之间完成计算)。
解决:分别对CPU和GPU压力进行评估和优化。

转载于:https://www.cnblogs.com/HackHer/p/6341675.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值