《深⼊理解Android卷III》—Android书籍
⽂章⽬录
出版年: 2015-8-1
简介:
深⼊理解Android(卷3)》是Android经典畅销书系(对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源代码进⾏分析的过程中,本书尽可能地对其中的精妙之处进⾏了分析和解读,⽬的是希望帮助读者领悟其中的优秀设计思想和⽅法。
第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
eclipse android2.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