Google 为何把 SurfaceView 设计的这么难用?

简介: q

如果你有过 SurfaceView 的使用经历,那么你一定和我一样,曾经被它所引发出 层出不穷的异状 折磨的 怀疑人生—— 毕竟,作为一个有理想的开发者,在深入了解 SurfaceView 之前,你很难想通这样一个问题:

为什么 Google 把 SurfaceView 设计的这么难用?

不支持 transform 动画;
不支持半透明混合;
移动,大小改变,隐藏/显示操作引发的各种问题;
另一方面,即使你对 SurfaceView 使用不多,图形系统 的这朵乌云依然笼罩在每一位 Android 开发者的头顶,来看 Google 对其的 描述:

最终我尝试走近这片迷雾,并一点点去思考下列问题的答案:

SurfaceView 的设计初衷是为了解决什么问题?
实际开发中,SurfaceView 这么 难用 的根本原因是什么?
为了解决这些问题,Google 的工程师进行了哪些 尝试 ?
接下来,读者可带着这些问题,跟随笔者一起,再次回顾 SurfaceView 设计和实现的精彩历程。

一、世界观
在了解 SurfaceView 的设计初衷之前,读者首先需要对 Android 现有的图形架构有一个基本的了解。

Android 系统采用一种称为 Surface 的图形架构,简而言之,每一个 Activity 都关联有至少一个 Window(窗口),每一个 Window 都对应有一个 Surface。

Surface 这里直译过来叫做 绘图表面 ,顾名思义,其可在内存中生成一个图形缓冲区队列,用于描述 UI,经与系统服务的WindowServiceManager 通信后、通过 SurfaceFlinger 服务持续合成并送显到显示屏。

相关文章
|
5月前
|
Android开发 Swift iOS开发
探索Android与iOS开发的差异性:平台特性与用户体验的深度剖析
【7月更文挑战第27天】在移动应用开发的广阔天地中,Android和iOS两大阵营各自占据半壁江山。本文将深入探讨这两个平台在开发过程中的关键差异,从编程语言、工具集到用户界面设计原则,以及它们如何影响最终的用户体验。通过对比分析,我们将揭示每个平台的独特优势,并讨论如何在这些差异中寻找平衡点,以实现跨平台的成功。
|
前端开发 Java 程序员
iOS开发 - 抛开表面看本质之iOS常用架构(MVC,MVP,MVVM)
iOS开发 - 抛开表面看本质之iOS常用架构(MVC,MVP,MVVM)
481 0
|
Linux Android开发 iOS开发
使用Flutter Widget开发游戏”是男人就坚持100秒“,一套代码横跨6端~
在文章里我说要用Widget再来做一次。现在兑现我的承诺,并且上周日在B站直播了整个开发过程
436 0
使用Flutter Widget开发游戏”是男人就坚持100秒“,一套代码横跨6端~
|
编解码 Android开发
适配完结篇二 - 谷歌小弟的Android多分辨率适配框架
• 切图存放于drawable-nodpi • 抛开系统的dpi并且摒弃dp和sp,统一使用px作为尺寸单位 • 按照给定高分辨率(如1920*1080)切图和布局, 其实只有1080px有参考价值 • 根据需要, 等比例缩放每个View 目前,xxhdpi分辨率的手机占了主流,所以在该框架中采用了drawable-xxhdpi的切图。倘若以后xxxhdpi分辨率的手机占了主导地位,那么就请UI设计师按照该分辨率切图,我们将其放在drawable-nohdpi中,再修改BASE_SCREEN_WIDTH即可。
244 0
|
Linux Android开发 开发者
Google工程师多图详解Android系统架构
  近日,Google的一位工程师Sans Serif发布了一篇博文非常清楚的描述了Android系统架构,中国移动通信研究院院长黄晓庆在新浪微博上推荐了该文,并认为文中对Android的介绍很好,您可以看一下Google工程师眼中的Android系统架构是什么样的。
1905 0