标题：Android开发精要
基本信息
  Android开发精要作者： 范怀宇
出版年： 2012-8
页数： 335
定价： 69.00元
ISBN： 978-7-1113-9058-9[1]
内容简介
如何才能写出贴近Android设计理念、能够更加高效和可靠运行的Android应用？通过Android的源代码去了解其底层实现细节是最重要的方法之一！然而，Android系统太过于庞大，源代码实现复杂，学习的技术门槛和时间成本都很高。 有没有一种方法既能帮助开发者深入理解Android应用开发，又能不被底层大量的实现细节所羁绊，迅速掌握编写高质量Android应用所需的知识？本书针对这个问题给出了完美的答案！它从Android繁杂的源代码中抽取出了Android开发的“精华”和“要点”，剥离了大量琐碎的底层实现细节，进行了高度概括和总结，不仅能帮助开发者迅速地从宏观上理解整个Android系统的设计理念，而且能帮助开发者迅速地从微观上掌握核心知识点的原理，从而编写出高质量的Android应用。[1]
本书共13章，在逻辑上分为4个部分。第一部分（1～2章）：第1章系统介绍了Android的系统架构、核心模块和设计思想，旨在让读者真正理解它的设计理念；第2章讲解了Android源代码的获取、编译、阅读和编辑的方法。第二部分（3～6章）：第3章深入阐述了Android组件机制的设计理念和重要特征，并详细介绍了4大组件的方法和原理；第4章讲解了Intent对象和Android的意图机制，阐明了Android是如何将来自不同应用、不同进程的组件整合在一起的；第5章解析了Android中各个组件的生命周期，包括组件的进程模型和线程模型；第6章从开发的角度详细阐述了组件间数据传输的解决方案，以及它们的优缺点和适用场景。第三部分（7～8章）：第7章深入讲解了Android的控件框架，结合实际项目对重要控件的实现和使用逐一进行了分析，还包含Android 4.0界面开发的实践“精华”；第8章分析了Android的资源体系，剖析了Android底层对资源的处理。第四部分（9～13章）：第9章讲解了Android的数据存储结构，以及不同数据存储模式的使用要点；第10章分析了Android的各种网络连接方式，涵盖NFC和基于WiFi的P2P连接等内容；第11章讲解了Android的定位服务、地址服务和地图服务的框架实现；第12章仔细分析了Android各种多媒体功能的实现机制；第13章对Android中比较有特色的一些模块的实现细节进行了分析。
作者简介
范怀宇，资深Android开发工程师，毕业于清华大学，从事移动开发多年，对Android系统有颇为深入的研究，开发经验十分丰富。曾就职于网易有道，负责完成了有道词典Android版、网易掌上邮Android版、网易八方Android版等项目的开发工作，现就职于豌豆实验室，负责豌豆荚2.0版本的设计和开发。[1]
目录
前言
致谢
第1章　Android的系统架构/1
1.1　Android系统架构概况/2
1.1.1　应用层/4
1.1.2　框架层/5
1.1.3　运行时/5
1.1.4　核心类库/7
1.1.5　硬件抽象层和Linux内核/7
1.2　Android的核心功能模块/8
1.2.1　界面框架/8
1.2.2　数据存储/9
1.2.3　网络通信/10
1.2.4　地理信息/11
1.2.5　图形和多媒体处理/11
1.2.6　外部设备/12
1.2.7　特色功能模块/13
1.3　Android的架构特征和设计思想/13
1.3.1　平台开放性/14
1.3.2　基于组件的应用设计/14
1.3.3　基于网络服务的平台/15
1.4　小结/15
第2章　Android源代码的下载和编译/16
2.1　Android源代码的获取和编译/17
2.1.1　环境搭建/18
2.1.2　源代码获取/18
2.1.3　源代码的编译/21
2.2　Android源代码结构/22
2.2.1　框架层源代码目录frameworks/22
2.2.2　应用层源代码目录packages/24
2.2.3　其他源代码目录/24
2.3　Android源代码的阅读和编辑/25
2.3.1　用Eclipse阅读源代码/25
2.3.2　反馈Bug/26
2.3.3　提交修改/27
2.4　小结/27
第3章　Android组件模型解析/28
3.1　基于Mashup的应用设计/29
3.1.1　Android中的Mashup/29
3.1.2　基于Mashup的Android应用模型/30
3.1.3　基于Mashup的应用架构特征/32
3.2　界面组件Activity解析/34
3.2.1　界面组件的功能和特征/34
3.2.2　界面组件的开发/35
3.2.3　界面组件的数据结构/39
3.3　服务组件Service解析/40
3.3.1　服务组件的功能和特征/41
3.3.2　服务组件的开发和使用/43
3.3.3　服务组件的进程间通信模型/45
3.4　触发器组件Broadcast Receiver解析/49
3.4.1　触发器组件的功能和特征/49
3.4.2　触发器组件的使用/50
3.4.3　广播事件的发送/52
3.5　数据源组件Content Provider解析/52
3.5.1　数据源组件的定位和操作/53
3.5.2　数据源组件的开发/55
3.5.3　数据源组件的实现细节/57
3.6　应用配置文件解析/59
3.6.1　权限配置/61
3.6.2　环境配置/63
3.6.3　应用和组件配置/65
3.7　小结/66
第4章　Android的Intent机制/67
4.1　Intent对象的作用和构成/68
4.1.1　Intent对象的作用/69
4.1.2　Intent对象的构成/70
4.1.3　Intent对象解析/75
4.1.4　Intent Filter对象/76
4.2　意图匹配/78
4.2.1　意图匹配的算法流程/79
4.2.2　匹配组件的选择/84
4.2.3　意图匹配的优化/85
4.3　意图机制的应用/86
4.3.1　意图机制在界面组件中的应用/86
4.3.2　意图机制在服务组件中的应用/88
4.3.3　意图机制在触发器组件中的应用/89
4.4　小结/90
第5章　组件生命周期解析/91
5.1　应用进程模型/92
5.1.1　应用、组件和进程/92
5.1.2　组件的应用进程配置/94
5.2　应用进程托管/96
5.2.1　为什么需要进程托管/97
5.2.2　进程优先级/97
5.2.3　进程回收算法/100
5.2.4　进程的强行终止/103
5.2.5　掌控进程的优先级/105
5.3　组件的生命周期模型/106
5.3.1　界面组件的生命周期/107
5.3.2　服务组件的生命周期/115
5.3.3　触发器组件的生命周期/119
5.3.4　数据源组件的生命周期/120
5.3.5　应用环境的生命周期/120
5.4　任务和界面组件栈/120
5.4.1　界面组件的运行模式/122
5.4.2　组件的任务黏度/126
5.4.3　实际应用中的任务控制/127
5.5　小结/128
第6章　组件间的数据传输/129
6.1　利用Intent对象进行数据传输/130
6.1.1　利用Intent对象回传数据/131
6.1.2　利用Intent对象传递数据的优缺点/133
6.2　利用文件进行数据共享/134
6.2.1　利用文件进行数据共享的实现/134
6.2.2　利用文件进行数据共享的优缺点/135
6.3　利用应用环境的全局数据共享/136
6.3.1　利用应用环境对象共享数据的实现/137
6.3.2　利用应用环境对象共享数据的优缺点/138
6.4　利用组件共享数据/139
6.4.1　利用数据源组件共享数据/139
6.4.2　利用服务组件共享数据/140
6.5　小结/140
第7章　Android控件解析/141
7.1　Android的控件框架/142
7.1.1　Android控件构成/142
7.1.2　Android交互事件传输/143
7.1.3　Android控件属性/145
7.1.4　控件的丈量和绘制/150
7.2　Android的窗口机制/150
7.2.1　窗口机制的基本原理/151
7.2.2　界面组件和窗口/152
7.2.3　对话框/154
7.2.4　弹出窗口/156
7.3　Android的基本控件介绍/158
7.3.1　文本控件/159
7.3.2　图像控件/163
7.3.3　Surface控件/164
7.3.4　Layout控件/164
7.3.5　适配器控件/167
7.3.6　选项卡控件/172
7.3.7　浏览器控件/173
7.4　自定义控件/175
7.4.1　控件的定制/175
7.4.2 　复合控件/180
7.4.3　自绘控件/183
7.5　Android界面新发展/188
7.5.1　动作栏/188
7.5.2　界面片段/191
7.5.3　重新定制选项卡/197
7.5.4　交互界面的适配/200
7.6　小结/204
第8章　应用资源/205
8.1　Android应用资源体系/206
8.1.1　Android的应用资源构成/206
8.1.2　应用资源的适配/208
8.1.3　应用资源的动态匹配/209
8.2　应用资源的调用/213
8.2.1　应用资源的编译和R类/213
8.2.2　应用资源的管理/215
8.2.3　使用应用资源/216
8.3　应用资源的类型/217
8.3.1　界面和样式/217
8.3.2　字符串和常量/221
8.3.3　图像、图形和动画/223
8.3.4　其他资源文件/225
8.4　小结/225
第9章　数据存储/226
9.1　Android的文件系统/227
9.1.1　Android的目录结构/229
9.1.2　Android的应用数据存储/229
9.1.3　Android的文件操作/231
9.2　使用设置文件/233
9.2.1　设置文件的存储和使用/234
9.2.2　设置界面组件/235
9.3　使用数据库/238
9.3.1　Android数据库实现/238
9.3.2　Android数据库的使用/240
9.4　存储在云端/243
9.4.1　云端存储的架构/244
9.4.2　云端存储的使用/245
9.5　小结/247
第10章　网络通信/248
10.1　Web通信/249
10.1.1　基于HTTP的网络连接/249
10.1.2　联网方式的选择/252
10.1.3　WiFi的管理/254
10.2　蓝牙/256
10.2.1　Android的蓝牙实现/256
10.2.2　基于蓝牙的通信/257
10.3　近场通信/259
10.3.1　基于NFC的识别和通信/259
10.3.2　基于NFC的点对点通信/263
10.4　基于WiFi连接的P2P通信/263
10.4.1　Android 4.0的P2P连接实现/264
10.4.2　使用Socket进行数据传输/266
10.5　小结/268
第11章　地理信息服务/269
11.1　Android的定位服务/270
11.1.1　定位服务框架/270
11.1.2　位置信息源/272
11.1.3　定位选择/273
11.1.4　定位实例/274
11.2　Android的地址服务/277
11.2.1　地址服务的框架/277
11.2.2　使用地址服务/278
11.3　Android的地图服务/279
11.3.1　使用地图/279
11.3.2　其他使用地图服务的方式/282
11.4　小结/283
第12章　多媒体处理/284
12.1　Android的图像处理/285
12.1.1　图像的表示/285
12.1.2　图像的读取和输出/286
12.1.3　图像的呈现/288
12.1.4　图像的管理/290
12.2　Android的音视频处理/291
12.2.1　Android音视频的支持框架/291
12.2.2　Android音视频的播放/292
12.2.3　Android音视频的录制/294
12.3　Android中相机的使用/296
12.4　小结/300
第13章　其他重要模块/301
13.1　通话和短信/302
13.1.1　Android的通话和短信框架/302
13.1.2　通话的处理/303
13.1.3　短信的发送和接收/305
13.2　App Widget的使用和实现/308
13.2.1　Android的App Widget框架/309
13.2.2　App Widget的界面构造和Remote Views /311
13.2.3　App Widget的事件处理和Pending Intent /313
13.3　Android的应用内搜索/317
13.3.1　Android应用内搜索实现框架/317
13.3.2　为应用定制搜索功能/318
13.3.3　全局搜索功能/322
13.4　Android的全局通知机制/323
13.4.1　全局通知的类型和实现/324
13.4.2　Toast的使用/325
13.4.3　状态栏通知/327
13.5　Android联系人处理/331
13.5.1　Android联系人数据存储框架/331
13.5.2　Android联系人操作/332
13.6　小结/334
内容摘录
4.1.2 Intent对象的构成 
Intent对象的这些作用，都是通过它的实现和设计体现出来的。从数据结构来看，Intent类的实现非常简单，它并没有包含复杂的逻辑功能，只是包含着若干个数据项。 
Action项
在日常生活中描述自己的意愿或愿望时，总是用一个表达动作的词作为意愿的核心。比如：我要吃饭、我想写书、我要做俯卧撑，等等，其中的“吃”、“写”、“做”都是在说明整个意愿的动作，是整个意愿表达的核心之一。 在Intent中，Action就是用来表达动作的。当调用组件指明了一个Action，执行组件就会依照这个动作的指示，接受相关的输入，执行对应的操作，生成所期望的输出。在实现上，Action是一个字符串，可以调用Intent.setAction函数为Intent对象指定一个动作，也可以通过Intent.getAction函数读取Intent对象中的动作信息。为了保持动作的唯一性和实现的可扩展性，Action的命名格式遵循Java包的命名规范，比如可以这样自定义一个表示“吃”的动作：com.duguhome.sample.action.ACTION_EAT，其中，com.duguhome.sample是应用的包名，action表示定义的是一个Action动作，而ACTION_EAT，则具体指明了该动作的含义。在Android的Intent类中，定义了很多标准的动作，比如：Intent.ACTION_VIEW、Intent.ACTION_PICK等。这些标准动作约定了Android组件间的通信规范，保证了组件系统的可扩展性，使得那些相互独立的组件能够通过这些标准的Action信息彼此沟通。如果系统预设的这些“标准动作”不能满足应用的需求，则各个应用都可以自行定义扩展。但与这些“标准动作”相比，自定义的Action不常用在跨应用的通信中，而仅应用于内部组件的通信。[2]