《深入理解Android:卷Ⅲ》是一本针对Android开发高级技术的详尽手册,着重解析Android用户交互框架的各个层面,从基础设置到高级自定义,涵盖了开发环境部署、Java Binder、MessageQueue、以及AudioService等核心主题,书中旨在使读者超越代码层面,领会其背后的设计理念,从而培养出深入分析和优化代码的能力,通过对Framework的细节剖析,书籍提供了关于如何构建和定制用户接口的深刻见解,特别是第四至六章对Android UI的深入讲解,以及第七、八章对SystemUI与壁纸的架构分析,这不仅为读者构建复杂UI提供了指导,更为深度定制Android系统打下了坚实的基础,在介绍如何解读和应用源代码的同时,书中还着重指出了Android系统设计的巧妙之处,鼓励读者在实践中提升自己的设计与开发水平。
本书关注的重点是Android中有关用户交互的Framework的知识。第1章和第2章是全书的基础。第3章的内容相对独立,主要介绍与用户交互直接相关的音频方面的知识。而第4-6章是本书的重点内容,介绍了AndroidUI的通用实现。在深入理解这三章的知识之后,读者可以通过借鉴第7章和第8两章所介绍的SystemUI与壁纸的架构来提高对Android的用户交互进行深度定制的能力。另外,Android源代码作为一个优秀的开源项目,大到架构的设计,小到某段代码的实现,都包含值得我们细细地品味与吸收的设计思想,并且可以应用于自己所设计的代码之上。因此本书在代码分析的过程中会尽可能地对Android采用某种特定实现的原因给出解释或对其优秀的设计思路进行提取,希望读者能够知其然更知其所以然,进而能够在代码研究的过程中跳出代码的具体实现来体会其设计思想,而这正是本书根本目的所在。
目录
- 推荐序
- 前 言
- 第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章 深入理解WindowManagerService90
- 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初探performLayoutAndPlaceSurfacesLockedInner()127