发表于2024-12-26
经典畅销书系“深入理解Android”系列Framework卷完结篇,数十万Android开发工程师翘首以盼
从源代码层面全面、详细剖析了Android 框架UI系统的实现原理和工作机制,以及优秀代码的设计思想,填补市场空白
要想充分理解并用好Android系统,没有捷径,从它的源代码入手是好的办法。早在2011年,我们就洞察到了广大Android开发者的这一需求,于是我们与国内知名的Android技术专家邓凡平先生一起规划了这套“深入理解Android”丛书。从一开始,我们就对这套书有系统的规划(详见本书的推荐序),对整个Android系统做了细粒度的划分,涵盖Android系统的每一个模块和细节。目前,这套书已经出版5本,在市场上引起了强烈的反响,几乎成为深入、系统了解Android工作原理的必读之书。
《深入理解Android(卷3)》是该系列Framework卷的第III卷,分析的主要对象是Android系统的UI,这应该是目前该领域系统和深入的资料。
《深入理解Android(卷3)》是Android经典畅销书系“深入理解Android”系列Framework卷的第III卷,从源代码的角度,对Android系统的Audio和UI两大功能的相关模块的实现原理和工作机制做了系统且详细的分析,填补了市场的空白。
《深入理解Android(卷3)》在逻辑上分为4个部分:
Part 01(第1~2章):这是本书的基础部分,首先介绍了Android源码环境的搭建、编译和调试;然后讲解了Android进程间通信与任务调度的工具Binder与MessageQueue。这两项基础工作是深入研究Android前必须做的功课。
Part 02(第3章):详细分析了AudioService服务的实现,包括音量管理、音频外设管理、AudioFocus机制的实现等内容。
Part 03(第4~6章):这是本书的核心内容之一,详细分析了Android UI的通用实现,依次剖析了WindowManagerService、Android输入系统、Android控件系统的工作原理。
Part 04(第7~8章):主要分析了SystemUI和Android壁纸相关服务的实现,包括StatusBarManagerService与NotificationManagerService两个系统服务,以及WallpaperManagerService系统服务、动态壁纸与静态壁纸的工作原理等内容。
除此之外,在对海量的Android源代码进行分析的过程中,本书尽可能地对其中的精妙之处进行了分析和解读,目的是希望帮助读者领悟其中的优秀设计思想和方法。
张大伟,资深Android系统开发工程师,现就职于索尼移动。从2011年开始从事Android开发,专注于Android系统源代码的研究、定制与维护工作,对Android的架构设计与运行原理有着深入的认识与实践经验,其中对UI相关模块、多媒体系统尤为擅长。曾主持了Android多窗口、多任务以及单手操作等系统定制的开发工作。此外对于其他开发平台如.NET亦有相当的经验。
推荐序
前 言
第1章 开发环境部署1
1.1获取Android源代码1
1.2Android的编译3
1.3在IDE中导入Android源代码4
1.3.1将Android源代码导入Eclipse4
1.3.2将Android源代码导入SourceInsight5
1.4调试Android源代码6
1.4.1使用Eclipse调试Android Java源代码6
1.4.2使用gdb调试Android C/C++源代码8
1.5本章小结9
第2章深入理解Java Binder和MessageQueue10
2.1概述11
2.2Java层中的Binder分析11
2.2.1Binder架构总览11
2.2.2初始化Java层Binder框架13
2.2.3窥一斑,可见全豹乎16
2.2.4理解AIDL25
2.2.5Java层Binder架构总结28
2.3心系两界的MessageQueue28
2.3.1MessageQueue的创建29
2.3.2提取消息29
2.3.3nativePollOnce函数分析32
2.3.4MessageQueue总结42
2.4本章小结44
第3章 深入理解AudioService45
3.1概述46
3.2音量管理47
3.2.1音量键的处理流程47
3.2.2通用的音量设置函数setStreamVolume()61
3.2.3静音控制63
3.2.4音量控制小结67
3.3音频外设的管理68
3.3.1 WiredAccessoryObserver 设备状态的监控68
3.3.2AudioService的外设状态管理73
3.3.3音频外设管理小结78
3.4AudioFocus机制的实现78
3.4.1AudioFocus最简单的例子79
3.4.2AudioFocus实现原理简介81
3.4.3申请AudioFocus82
3.4.4释放AudioFocus86
3.4.5AudioFocus小结87
3.5AudioService的其他功能88
3.6本章小结89
第4章 深入理解WindowManager-Service90
4.1初识WindowManagerService91
4.1.1一个从命令行启动的动画窗口91
4.1.2WMS的构成99
4.1.3初识WMS的小结103
4.2WMS的窗口管理结构104
4.2.1理解WindowToken107
4.2.2理解WindowState111
4.2.3理解DisplayContent112
4.3理解窗口的显示次序112
4.3.1主序、子序和窗口类型112
4.3.2通过主序与子序确定窗口的次序114
4.3.3更新显示次序到Surface119
4.3.4关于显示次序的小结119
4.4窗口的布局119
4.4.1从relayoutWindow()开始120
4.4.2布局操作的外围代码分析124
4.4.3初探performLayoutAndPlace-SurfacesLockedInner()127
4.4.4布局的前期处理128
4.4.5布局DisplayContent130
4.4.6布局的最终阶段150
4.5WMS的动画系统150
4.5.1Android动画原理简介151
4.5.2WMS的动画系统框架155
4.5.3WindowAnimator分析156
4.5.4深入理解窗口动画160
4.5.5交替运行的布局系统与动画系统173
4.5.6动画系统总结174
4.6本章小结174
第5章 深入理解Android输入系统176
5.1初识Android输入系统177
5.1.1getevent与sendevent工具178
5.1.2Android输入系统简介179
5.1.3IMS的构成181
5.2原始事件的读取与加工185
5.2.1基础知识:INotify与Epoll186
5.2.2 InputReader的总体流程189
5.2.3 深入理解EventHub191
5.2.4 深入理解InputReader205
5.2.5原始事件的读取与加工总结225
5.3输入事件的派发225
5.3.1通用事件派发流程226
5.3.2按键事件的派发237
5.3.3DispatcherPolicy与InputFilter247
5.3.4输入事件的派发总结250
5.4输入事件的发送、接收与反馈250
5.4.1深入理解InputChannel251
5.4.2连接InputDispatcher和窗口252
5.4.3事件的发送260
5.4.4事件的接收263
5.4.5事件的反馈与发送循环264
5.4.6输入事件的发送、接收与反馈总结267
5.5关于输入系统的其他重要话题267
5.5.1输入事件ANR的产生267
5.5.2 焦点窗口的确定270
5.5.3以软件方式模拟用户操作273
5.6本章小结273
第6章 深入理解控件系统275
6.1 初识Android的控件系统276
6.1.1 另一种创建窗口的方法277
6.1.2 控件系统的组成278
6.2 深入理解WindowManager279
6.2.1 WindowManager的创建与体系结构279
6.2.2 通过WindowManagerGlobal添加窗口282
6.2.3 更新窗口的布局284
6.2.4 删除窗口285
6.2.5 WindowManager的总结285
6.3 深入理解ViewRootImpl286
6.3.1 ViewRootImpl的创建及其重要的成员286
6.3.2 控件系统的心跳:performTraversals()290
6.3.3 ViewRootImpl总结317
6.4 深入理解控件树的绘制317
6.4.1 理解Canvas317
6.4.2 View.invalidate()与脏区域320
6.4.3 开始绘制321
6.4.4 软件绘制的原理323
6.4.5 硬件加速绘制的原理334
6.4.6 使用绘图缓存346
6.4.7 控件动画356
6.4.8 绘制控件树的总结360
6.5 深入理解输入事件的派发361
6.5.1 触摸模式361
6.5.2 控件焦点363
6.5.3 输入事件派发的综述376
6.5.4 按键事件的派发381
6.5.5 触摸事件的派发388
6.5.6 输入事件派发的总结404
6.6 Activity与控件系统405
6.6.1 理解PhoneWindow405
6.6.2 Activity窗口的创建与显示414
6.7 本章小结416
第7章 深入理解SystemUI418
7.1 初识SystemUI419
7.1.1 SystemUIService的启动420
7.1.2 状态栏与导航栏的创建422
7.1.3 理解IStatusBarService425
7.1.4 SystemUI的体系结构427
7.2 深入理解状态栏428
7.2.1 状态栏窗口的创建与控件树结构429
7.2.2 通知信息的管理与显示434
7.2.3 系统状态图标区的管理与显示448
7.2.4 状态栏总结452
7.3 深入理解导航栏452
7.3.1 导航栏的创建453
7.3.2 虚拟按键的工作原理459
7.3.3 SearchPanel462
7.3.4 关于导航栏的其他话题465
7.3.5 导航栏总结471
7.4 禁用状态栏与导航栏的功能472
7.4.1 如何禁用状态栏与导航栏的功能472
7.4.2 StatusBarManagerService对禁用标记的维护473
7.4.3 状态栏与导航栏对禁用标记的响应474
7.5 理解SystemUIVisibility475
7.5.1 SystemUIVisibility在系统中的漫游过程476
7.5.2 SystemUIVisibility发挥作用482
7.5.3 SystemUIVisibility总结494
7.6 本章小结495
第8章 深入理解Android壁纸496
8.1 初识Android壁纸497
8.2深入理解动态壁纸498
8.2.1启动动态壁纸的方法498
8.2.2壁纸服务的启动原理498
8.2.3 理解UpdateSurface()方法510
8.2.4 壁纸的销毁515
8.2.5 理解Engine的回调516
8.3 深入理解静态壁纸—ImageWallpaper519
8.3.1 获取用作静态壁纸的位图519
8.3.2 静态壁纸位图的设置522
8.3.3 连接静态壁纸的设置与获取—WallpaperObserver524
8.4 WMS对壁纸窗口的特殊处理526
8.4.1 壁纸窗口Z序的确定527
8.4.2 壁纸窗口的可见性533
8.4.3 壁纸窗口的动画535
8.4.4 壁纸窗口总结538
8.5 本章小结539
Foreword 推 荐 序
回顾
今天是一个值得高兴的日子。历经两年多的艰苦奋斗,张大伟同学的这本著作,同时也是“深入理解Android”系列三卷中的最后一卷终于完成了。从2011年我和华章公司的杨福川编辑一起开创这一迄今为止国内Android技术书籍市场上唯一一套兼具广度和深度的“深入理解Android”系列书籍算起,四个年头已经过去。在这四年中,本系列书籍的作者们和出版社的编辑们共同奋斗,成果斐然:
2011年9月《深入理解Android:卷I》发布。
2012年8月《深入理解Android:卷II》发布。
2013年1月,本系列的第一本专题卷《深入理解Android:Telephony原理剖析与最佳实践》发布,作者是杨青平。
2014年4月,本系列的第二本专题卷《深入理解Android:Wi-Fi,NFC和GPS卷》发布。
2015年,《深入理解Android:卷III》发布,作者即是本书的主人公张大伟。
2015年及以后,我们还要发布“深入理解Android”系列书籍中的WebKit专题卷、自动化测试卷、蓝牙专题卷等。
从技术层面来说,本书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分。在一个特别讲究“颜值”的时代,本书分析了Android 4.2中WindowManagerService、ViewRoot、Input系统、StatusBar、Wallpaper等重要“颜值绘制/处理”模块。虽然在写书的两年中,Android版本已经从4.2进化到M,但“面虽新,神依在”。所以,我可以很负责任地说,对那些掌握了本书精髓的读者而言,即使Android未来升级到了X,那也只不过是换了一个“马甲”罢了。
展望
我在《深入理解Android:卷II》中曾经详细阐述过“深入理解Android”这一系列的路线图(http://blog.csdn.net/innost/article/details/7648869)。
本系列书大体分为应用部分、Framework部分、专题部分和内核部分。
1)应用部分。这部分拟以Android源码中自带的那些应用程序为分析目标,充分展示Google在自家SDK平台上进行应用开发的深厚功力。这些应用包括Contacts、Gallery2、Mms、Browser等,它们的分析难度都不可小觑。通过对这些系出名门的应用的分析,我们希望读者不仅能把握商业级应用程序开发的精髓,更能精确熟练地掌握Android应用开发的各种技能。
2)Framework部分。关注Android的框架,包括三本书。
卷I:以Native层Framework模块为分析对象。知识点包括init、binder、zygote、jni、Message和Handler、audio系统、surface系统、vold、rild和mediascanner。本书已于2011年9月出版,虽然是基于Android 2.2,读者如若扎实地掌握并理解了其中的内容,那么以后再研究Android 2.3或4.0版本中对应的模块,也是轻而易举之事了。
卷II和卷III:以Java层Framework模块为分析对象。卷II基于4.0.1版,包括UI相关服务和Window系统之外的一些重要服务,如PackageManagerService、ActivityManagerService、PowerManagerService、ContentService、ContentProvider等。而的卷III将以输入系统、WindowManagerService、UI相关服务为主要目标。
Framework部分这3本书的目的是让读者对整个Android系统有较大广度、一定深度的认识,这有益于读者构建一个更为完整的Android系统知识结构。应当指出,这3本书不可能覆盖Android Framework中的所有知识点。因此,尚需读者在此基础上,结合不同需求,进行进一步的深入研究。
3)专题部分。这部分旨在帮助读者沿着Android平台中的某一些专业方向,进行深度挖掘,这一部分拟规划如下专题:
Telephony专题,涵盖SystemServer中相关的通信服务、rild、短信、电话等模块。
多媒体专题,涵盖MultiMedia相关的模块,包括Stagefright、OMX等。另外,我们也打算引入开源世界中最流行的一些编解码引擎和播放引擎作为分析对象。
浏览器和Webkit专题,该专题难度非常大,但其重要性却不言而喻。
Dalvik虚拟机专题,该专题希望对Dalvik进行一番深度研究,涉及面包括Java虚拟机的实现、Android的一些特殊定制等内容。现在来看,Dalvik已经被ART替换,所以这本书的目标就应该是ART虚拟机专题了。
Android系统安全专题,该专题的目标是,分析Android系统上提供的安全方面的控制机制。另外,Linux平台上的一些常用安全机制(例如,文件系统加密等)也是本书所要考虑的。这套安全专题我已经在自己的博客上写了部分内容,包括Java Security、设备加密等。
UI/UE设计以及心理学专题,该专题希望能提供一些心理学方面的指导以及具体的UI/UE设计方面的指南,以帮助开发人员开发出更美、更体贴和更方便的应用。
专题部分隐含着的一个极为重要的宗旨:即基于Android,而高于Android。换言之,这些书籍虽都以Android为切入点,但我们更希望读者学到的知识、掌握的技术不局限于Android平台。
4) 内核部分。这部分拟以Linux内核为主。虽然这方面的经典教材非常多,但要么是诸如《Linux内核情景分析》之类的鸿篇巨帙,要么是类似《Linux内核设计与实现》,内容过于简洁。另外,现有书籍使用的内核源码都比较陈旧。为此,我们希望能有一本难度适中、知识面较广、深度适宜的书籍。
今天,正是由于大伟的努力,我们的Framework部分得以完美收官。高兴的同时,我们认为前路依然艰辛。在此,我和福川兄再次诚挚邀请国内外有热情、愿分享、有责任心的兄弟姐妹们来一起继续发扬光大“深入理解Android”这一系列书籍。
还是杨澜的那句话,“原来我只佩服成功的人,现在我更尊敬那些正在努力的人”。让我们一起成为被尊敬的人吧!
轶事
我和大伟相知相识的过程还颇有点意思。
那时我们都在中科创达工作,有一次,我们俩要一起重构一个和音频相关的解码模块。当时我噼噼啪啪把几段和多线程相关的同步代码块改写后,引起了大伟的强烈质疑。在质疑(challenge)和争论(argue)的过程中,我发现大 深入理解Android(卷3) 下载 mobi epub pdf txt 电子书 格式
深入理解Android(卷3) 下载 mobi pdf epub txt 电子书 格式 2024
深入理解Android(卷3) 下载 mobi epub pdf 电子书不错不错不错不错不错不错
评分正版书籍,活动价很划算
评分这本书zhi'liang'ke'kao
评分很耐心!所有问题都解释的清清楚楚!有机会还会光顾的还不错。
评分哈哈哈 不错
评分最喜欢在京东买书!棒棒哒~划算又方便~
评分快递很快,隔天到了就是有点轻不够厚重
评分深入理解android,自己慢慢看吧,学习。
评分好,有足够的时间可以慢慢看。
深入理解Android(卷3) mobi epub pdf txt 电子书 格式下载 2024