文档章节

Android图形显示系统——概述

jxt1234
 jxt1234
发布于 2015/10/15 18:06
字数 950
阅读 46
收藏 1

Android的图形显示系统,虽然感觉自己基本了解了,有问题基本都能解决,但要写时,一是觉得千头万绪无从下笔,一是发现还有很多并没有真正搞懂。开工写这套体系,也顺便查漏补缺下。

Android图形显示系统的剖分

图形显示系统就像一个报社,它派出记者去采访,记者写成文稿后,将记者们交上来的文稿审核、排版、印刷,最终形成一期又一期报纸。

Android-Graphic
如上是Android图形显示系统的一个全貌图。每个Layer对应着一个Surface,每个Surface对应着一个View树,View树的底端,实际渲染的View包含一个渲染方法,这可能是 Widget(系统提供默认实现),Webcore(WebView走独立的渲染流程),Canvas(用户在Canvas层级上自定义绘制函数)和 OpenGL(GLSurfaceView,独立的渲染流程,由用户使用OpenGL实现渲染。)
SurfaceFlinger用来创建Layer,并且在上层绘制完成后,合成所有需要显示的Layer,送到LCD显示。其中gralloc是申请图形内存且连接fb(framebuffer)的模块,合成Layer时,优先选用hwcomposer,在hwcomposer无法解决时,采用默认的3D合成,也即调OpenGL标准接口,将各图层绘制到fb上。

以图中间那条线为界,显示系统划分为上下两层。
上层为应用级别的显示,解决如何绘制图层的问题,主要为java代码(记者采访/写作)。
下层为系统级别的显示,解决如何将绘制好的图层送显的问题(印刷),主要为C/C++代码。
一些调度的java代码,如起“排版”作用的WindowsManager,尽管起的作用是系统性的,由于是对外提供API,也归到上层显示。

应用级别的显示

这部分需要做的事情一是对开发者提供一套API,使其能简易的建立自己的UI界面。二是作一个排版工作,解析布局,管理View的层级。

显示相关API

和iOS一样,Google提供的API实际上也是分层级的,不过可能没有明确说明。

第一层级:View

这一层级主要是提供各种控件,如button、textview、image view等。

第二层级:Canvas

在开发者希望实现自定义的效果时,重载View的onDraw方法,或者直接用Surface获取Canvas,使用Canvas的API绘制自定义界面。这个Canvas调用的可能是软件的skia,也可能是硬件加速的hwui。

第三层级:OpenGL等

对于3D游戏而言,Android提供的Canvas是不能满足要求的,这时需要引入3D引擎直接调OpenGL。Android同样提供了这一套API。

View管理

这部分实际上相当于一个UI引擎,主要处理的是UI布局文件的解析,View层级关系的生成与管理,以及各个View逐级渲染的方法,这部分逻辑极其复杂。

系统级别的显示

这部分主要解决这些问题:
1、如何申请可以用来送显的内存,如何将其送往LCD?
2、如何提供窗口系统?
3、如何同步合成/显示多个图层?
4、如何支持多屏?
相对于提供了各种各样控件,支持各种渲染体系的上层显示来说,系统级别的显示代码相对单纯,性能上基本做到了最好,可复用性也很高。

后续将会先介绍下层显示,然后再慢慢分析上层显示。

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
jxt1234
粉丝 5
博文 36
码字总数 41634
作品 0
杭州
私信 提问
(连载) Android SDK 1.5 中文联机文档

刚开始学习android,在网上找关于android方面的教程,发现没什么合适的。找来找去,发现下的android下的文档才是最好,最权威的教程。翻译下来,一是为了加深理解,二可以为了以后查看方便,...

大东哥
2009/08/18
6.4K
5
4412开发板-Android系统架构

本文转自迅为开发板手册:http://www.topeetboard.com 1、 架构图直观 下面这张图展示了Android系统的主要组成部分: 可以很明显看出,Android系统架构由5部 分组成,分别是:Linux Kernel、...

topeet
2015/07/06
787
2
入手N8手机时考虑过的一个充分必要的条件~

最近常来塞班手机坛子里转,发现有伙人装成“专家”摇唇鼓舌,胡搅蛮缠攻击Nokia的N8,无非就是CPU主频率和屏幕分辨率。手上的“法器”不外二个——iOS和Android,其实该2个手机系统都是由L...

zctwx
2011/02/09
2.4K
40
C语言自学完备手册(22)——输入输出

版权声明: https://blog.csdn.net/lfdfhl/article/details/82897916 自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–o...

谷哥的小弟
2018/09/29
0
0
谷歌发布 Android 5.0 —— 代号“棒棒糖”

Android L 的“L”终于有了注解——Lollipop(棒棒糖),既不是 Lemon Meringue Pie,也不是 Licorice。延续此前甜品命名的传统,Google 发布了新一代Android 操作系统的5.0 正式版——Lolli...

oschina
2014/10/16
8.3K
53

没有更多内容

加载失败,请刷新页面

加载更多

【PG内核】事务ID冷冻简述

数据库代码中事务ID的类型TransactionId定义为:typedef uint32 TransactionId。因此事务ID最大值为2^32-1=4294967295。 事务ID是需要循环使用的,为了做到这一点,数据库在做vacuum时将很老...

movead
23分钟前
13
0
深入学习SpringMVC以及学习总结

一、优点: 1.SpringMVC简化web程序开发; 2.SpringMVC效率很好(单例模式); 3.SpringMVC提供了大量扩展点,方便程序员自定义功能; 如果想学习Java工程化、高性能及分布式、深入浅出。微服...

编程SHA
23分钟前
1
0
关于开源分布式事务中间件Fescar,我们总结了开发者关心的13个问题

开源分布式事务中间件 Fescar 自1月10日上线v0.1版本以来,受到了开发者们的极大关注(watch249,star3005,fork649,社区讨论的issue58,数据统计于1月17日14:00),可见,天下苦分布式事务...

阿里云官方博客
24分钟前
1
0
斯皮格尔:我们敢于采纳非常疯狂的创意

“阅后即焚”照片分享应用 Snapchat 母公司 Snap 的 CEO 埃文-斯皮格尔(Evan Spiegel)近日接受了英国《金融时报》记者的采访,谈到了该公司的未来发展,与社交网络 Facebook 的竞争,限制自己...

linuxCool
25分钟前
1
0
javaweb文件上传以及文件上传成功后但是目录中没有显示

经过看别人写的代码然后自己实际操作一遍,基本都是搬运也是为了练习。1:创建fileUpLoad.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UT......

小橙子的曼曼
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部