SurfaceView 用法

 我来答
正香教育
2022-07-09 · TA获得超过5565个赞
知道大有可为答主
回答量:4883
采纳率:100%
帮助的人:238万
展开全部

我们知道View是通过刷新来重绘视图,碧逗系统通过发出VSSYNC信号来进行屏幕的重绘,刷新的时间间隔是16ms,如果我们可以在16ms以内将绘制工作完成,则没有任何问题,如果我们绘制过程逻辑很复杂,并且我们的界面更新还非常频繁,这时候就会造成界面的卡顿,影响用户体验,为此Android提供了SurfaceView来解决这一问题。

SurfaceView 拥有独立的绘图表面,即它不与其宿主窗口共迟衡享同一个绘图表面。由于拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独立的线程中进行绘制。又由于不会占用主线程资源,SurfaceView 一方面可以实现复杂而高效的UI,另一方面又不会导致用户输入得不到及时响应。

我们知道普通的 Android 控件,例如 TextView、Button 等,它们都是将自己的UI绘制在宿主窗口的码慧做绘图表面之上,这意味着它们的UI是在应用程序的主线程中进行绘制的。一般来说,每一个窗口在SurfaceFlinger服务中都对应有一个Layer,用来描述它的绘图表面。对于那些具有SurfaceView的窗口来说,每一个SurfaceView在SurfaceFlinger服务中还对应有一个独立的Layer或者LayerBuffer,用来单独描述它的绘图表面,以区别于它的宿主窗口的绘图表面。SurfaceFlinger 服务把所有的 LayerBuffer 和 Layer 都抽象为 LayerBase,因此就可以用统一的流程来绘制和合成它们的UI。

注意,用来描述SurfaceView的Layer或者LayerBuffer的Z轴位置是 小于用来其宿主Activity窗口的Layer的Z轴位置的 ,但是前者会在后者的上面挖一个“洞”出来,以便它的UI可以对用户可见。实际上,SurfaceView在其宿主Activity窗口上所挖的“洞”只不过是在其宿主Activity窗口上设置了一块透明区域。

其中有部分方法已修改,需要日后 验证

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式