描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302653554
本书从框架和流程两个角度介绍图形显示系统,配合示例和全彩图解辅助读者学习。
本书主要介绍Android图形显示系统。首先介绍图形显示系统的框架;然后在对图形显示系统有一个整体认识的基础上,重点介绍每个图形组件的工作原理;最后介绍输入,输入与显示结合在一起才能实现用户与计算机的交互。
全书共分7章。第1章介绍图形显示系统的框架;第2章介绍图形显示系统涉及的进程间通信方式;第3章介绍硬件抽象层的图形组件;第4章介绍图形流消费者处理图形缓冲的流程;第5章介绍窗口位置管理服务的内容;第6章介绍图形流的生产过程;第7章介绍输入。
本书适合作为高等院校计算机、软件工程及相关专业本科生、研究生的参考资料,也可供有Android基础的软件开发者参考。
第1章 绪论/1
1.1 简介/1
1.2 图形显示系统框架/1
第2章 进程间通信/4
2.1 简介/4
2.1.1 定义/4
2.1.2 必要性/5
2.1.3 实现方法/6
2.2 Binder/7
2.2.1 示例/7
2.2.2 框架/8
2.2.3 Binder驱动/9
2.2.4 服务管理进程/12
2.2.5 服务进程/17
2.2.6 客户进程/29
2.2.7 示例回顾/31
2.2.8 线程池/32
2.2.9 Java Binder/34
2.2.10 文件描述符/35
2.2.11 通信模式/36
2.2.12 使用场合/37
2.3 共享内存/38
2.3.1 简介/38
2.3.2 实现方法/38
2.3.3 使用场合/39
2.4 套接字/39
2.4.1 简介/39
2.4.2 使用场合/40
2.5 本章小结/40
第3章 图形硬件/41
3.1 硬件抽象层/41
3.1.1 作用/41
3.1.2 接口定义/41
3.1.3 使用示例/42
3.2 硬件抽象层接口定义语言/45
3.2.1 背景/45
3.2.2 使用方法/46
3.2.3 进程间通信方式/48
3.3 Gralloc/48
3.3.1 简介/48
3.3.2 接口定义/49
3.3.3 分配图形缓冲流程/50
3.3.4 图形缓冲/51
3.4 Hardware Composer/53
3.4.1 简介/53
3.4.2 接口定义/53
3.4.3 硬件混合渲染器合成/56
3.4.4 图形库合成/60
3.5 本章小结/61
第4章 图形流消费者/62
4.1 简介/62
4.1.1 SurfaceFlinger初始化/62
4.1.2 客户进程与SurfaceFlinger交互/63
4.1.3 SurfaceFlinger与硬件抽象层交互/64
4.2 图层/64
4.2.1 创建图层/64
4.2.2 缓冲图层/67
4.2.3 图形的生产与消费/69
4.3 VSync/72
4.3.1 简介/72
4.3.2 作用/73
4.3.3 基本流程/74
4.4 图形合成/79
4.4.1 合成原理/79
4.4.2 纹理/80
4.4.3 混合/84
4.4.4 渲染引擎/84
4.4.5 合成流程/87
4.5 本章小结/91
第5章 窗口位置管理/92
5.1 简介/92
5.1.1 WMS/92
5.1.2 客户进程与WMS交互/93
5.1.3 WMS与SurfaceFlinger交互/94
5.2 窗口/94
5.2.1 创建窗口/94
5.2.2 窗口容器/95
5.2.3 控制窗口/96
5.3 窗口容器树/97
5.3.1 DisplayContent/97
5.3.2 DisplayChildWindow Container/99
5.3.3 TaskStack/100
5.3.4 Task/101
5.3.5 AppWindowToken/102
5.3.6 WindowState/103
5.3.7 SurfaceControl/104
5.4 窗口切换/106
5.4.1 切换原理/106
5.4.2 切换动画/107
5.4.3 切换流程/107
5.5 本章小结/113
第6章 图形流生产者/114
6.1 生产环境/114
6.1.1 启动流程/114
6.1.2 设置内容视图/116
6.1.3 设置根视图/118
6.1.4 初始化图形库/118
6.1.5 请求VSync信号/119
6.2 2D图形/119
6.2.1 视图/119
6.2.2 生产流程/120
6.3 3D图形/125
6.3.1 示例/125
6.3.2 生产流程/126
6.4 本章小结/133
第7章 输入/134
7.1 输入系统/134
7.2 输入管理/134
7.2.1 输入管理框架/134
7.2.2 启动过程/135
7.2.3 读取事件/137
7.2.4 分发事件/140
7.2.5 建立连接通道/141
7.2.6 分发到目标进程/142
7.2.7 在视图树中分发/144
7.2.8 处理事件/145
7.3 输入法/146
7.3.1 输入法框架/147
7.3.2 初始化服务/147
7.3.3 启动应用/149
7.3.4 显示应用界面/149
7.3.5 触摸输入框/150
7.3.6 输入内容/152
7.4 本章小结/152
附录A Binder通信示例/153
附录B 共享内存与套接字示例/156
附录C 纹理示例/163
图形显示系统在计算机、智能手机的普及过程中发挥着重要作用。早期的计算机只能通过命令行的方式进行交互,需要用户熟悉各种命令,这对于普通用户而言难度比较大。后来出现了支持图形显示系统的操作系统,用户与计算机之间通过图形的方式进行交互,大大降低用户使用计算机的难度,使得普通用户也可以用计算机完成特定任务,如玩游戏、看电影等。在以图形方式交互的系统中,软件开发者需要为应用开发各种图形界面,掌握图形显示系统更容易优化图形界面的交互体验。
图形显示系统是一个非常复杂的系统,涉及的模块比较多,而且很多模块偏底层,通过阅读代码很难掌握其中的知识点。笔者主要从事Android系统方面的开发工作,在工作中常常遇到与显示相关的问题,为了更好地处理这些问题,对Android的图形显示系统进行了系统性的学习,经过长时间的研究、摸索才有了一定程度的理解。为了使读者能更轻松、容易地了解图形显示系统方面的知识,笔者把相关的知识点整理出来,编写了本书。
本书从框架和流程两个角度对图形显示系统进行介绍。从框架开始认识图形显示系统的全貌,在此基础上学习框架中各个图形组件的工作流程。由于流程比较多,本书只对关键的流程进行重点介绍。为了帮助读者更容易地理解其中的知识点,笔者会结合简单的示例逐步展开介绍,分析示例背后的工作流程,同时配有大量的图例。
本书共分为7章,各章的主要内容如下。
第1章,从整体上认识图形显示系统的框架,了解图形显示系统需要掌握哪些内容。
第2章,介绍图形显示系统涉及的3种进程间通信方式,分别为Binder、共享内存和套接字。本章是学习图形显示系统的基础。
第3章,介绍硬件抽象层的图形组件的功能及其工作流程。
第4章,介绍图形流消费者的工作原理,主要介绍将多个图形缓冲合成到帧缓冲的过程。
第5章,介绍窗口位置管理服务的内容,包括如何创建和管理窗口。
第6章,介绍图形流生产者的工作原理,主要介绍2D图形、3D图形的生产和显示过程。
第7章,介绍图形窗口响应输入事件及输入法输入文字的流程。
本书之所以选择Android系统,是因为它是目前智能手机主流的操作系统,并且是开源的,其源码便于研究。本书基于Android 9基线,因此读者在阅读本书时需要下载AOSP(Android Open Source Project)源码,还需要准备一台装有Ubuntu系统的计算机,用于对源码进行编译,编译之后在模拟器上运行,方便对底层的源码进行跟踪学习。为了更好地理解本书的内容,读者需要先了解Android的基本概念,掌握C、C 和Java等编程语言的基本语法。
全书由李先儒编写,在编写过程中得到梁云侠的大力支持,在此表示衷心的感谢。
本书的内容基于笔者个人的理解写就,且笔者水平有限,书中难免会有不当之处,欢迎广大同行和读者批评指正。
李先儒
2023年8月
评论
还没有评论。