前言

为什么要写这本书

一直觉得我和Android还是蛮有缘分的,从Android发布第一个版本的SDK开始,我就一直在“摸着石头”写各种Android应用,了解一切与Android有关的事情,直至今日。还记得刚开始接触Android时,由于缺少相关的学习资料或书籍,入门都是一件非常困难的事情,只能靠自己不断地翻看SDK文档、尝试各种代码实现来揣摩如何开发Android应用,因而走过很多弯路,几乎犯过所有可能出现的错误,深感写好Android程序并不是一件很容易的事情。

如今有大量的开发者开始从事Android开发,幸运的是很多前辈写了大量关于Android开发的书籍,其中包括很多非常优秀的书籍,能帮助Android开发者更快速地学习Android开发,使他们不用再重复我当年初学时的痛苦。

但从我在工作中接触到的Android开发者来看,虽然学会如何编写Android应用不再是难事,但他们依旧困扰于如何写出地道的、贴近Android设计理念的、更加高效和运行可靠的Android应用。虽然已经有很多功力深厚的书籍详细剖析过Android底层实现的方方面面,能帮助开发者把Android应用写得更出色,但正是由于这类书中包含了大量底层实现细节,因此使得开发者学习成本较高,难于从中快速获取期望的内容,痛感“远水解不了近渴”。

因此,我萌生了写这本书的念头,期望从我的开发经验和繁杂的Android源代码中,抽取出Android开发的“精华”和“要点”,这些“精要”剥离了很多琐碎的实现细节,进行了更多的概括和总结。这一方面能够帮助开发者更深入理解Android的应用开发,从学会Android进阶到理解Android;另一方面又使他们不会被太多细节所牵绊,能够更快速地学习和掌握所需内容。

本书主要内容

本书将所有内容整理成四个部分共13章。

第一部分帮助读者重新认识Android,并从各个角度来介绍一些Android的核心理念和学习方法,包含前两章内容。第1章从多个方面介绍和阐述了对Android架构的理解,只有真正理解Android的设计理念和思想才能够更快地掌握Android开发。第2章介绍了如何获取、编译和阅读Android源代码,对于愿意投入更多时间学习Android的开发者来说,源代码无疑是最好的学习资料。

第二部分深入阐述了Android最核心的组件机制,包含4章内容。第3章从整体上阐述了Android组件机制的设计理念和重要特征,详细介绍了4大组件的特点和使用方式。第4章从设计和源代码出发,讲解了Intent对象和Android的意图机制,旨在帮助开发者理解Android是如何将来自不同应用、不同进程的组件整合在一起工作的。第5章介绍了Android各个组件的生命周期,包括每个组件的进程模型、线程模型,以及编程时需要把控的一些“要点”。第6章从实际开发的角度出发,详细介绍了组件间数据传递的解决方案,以及这些解决方案的优缺点和使用场景。

接下来的第三部分,转换到了另一个核心话题,即Android的交互界面开发,包括两章内容。第7章讲解了Android的控件框架,结合实际的项目,对重要控件的实现和使用逐一进行了分析与讲解,其中包含了最新的Android 4.0界面开发的一些实践“精华”。第8章继续介绍了Android的资源体系,详细剖析了Android底层对资源的处理,并结合具体的应用实现介绍了如何正确地配置资源和构建交互界面。

剩下的章节是第四部分,其内容涵盖了Android的各个核心模块,对每个模块的实现机制都做了分析,并结合具体的工程实践针对使用模块时最容易遇到的问题给出了解决方案。第9章介绍了Android的数据存储结构,以及不同的数据存储模式的使用要点,包括基于文件、基于设置文件(Preference)、基于数据库、基于云端等多种模式。第10章介绍了Android丰富多彩的网络连接方式,着重介绍了开发时常见问题的解决,范围不仅涵盖了传统的HTTP连接、蓝牙传输,还包括最新的近场通信(NFC)和基于 WiFi的P2P连接等。第11章讲解的是Android的地理信息服务,不仅包括Android的定位服务、地址服务和地图服务的框架实现,还特别针对定位时会遇到的各个问题给出了解决方案。第12章围绕Android的多媒体信息处理展开,具体包括了图像、音频、视频和相机的实现和使用,内存占用量大是多媒体处理中最常见的问题,该章结合对一些系统应用的剖析,总结了一些常用的解决策略。第13章涵盖内容比较多,主要介绍的是Android中比较有特色的一些模块,包括短信和通话的处理、联系人的使用、通知机制(Notification)、桌面小工具(App Widget)的开发等内容,着重介绍的是一些比较有特色的实现细节,以帮助开发者写出更为“地道”的Android应用。

本书特色

本书最大的特色在于对底层实现机制的总结和整理,以及结合项目实践经验对开发中常遇到的核心问题给出具体的解决策略。

对于底层实现机制的整理,可视为Android开发的“要点”,每个开发者都需要理解和掌握这些内容,才能在开发时“下笔如有神”。为了能够更好地传达这些要点,本书中不会出现大段的底层实现代码,而是把所有的实现机制和策略,整理成文字和图表进行总结解析,以帮助读者更轻松地学习和理解。

而对于实际开发问题的解决策略,可看做是Android开发中的“精华”部分。本书从系统应用和一些优秀开源项目中整理出常见问题的解决策略,并结合个人实践经验分析不同解决策略的思想和适用场景,不仅能够授读者以解决问题之“鱼”,更能够授其分析问题之“渔”。

本书面向的读者

我期望所有的Android应用开发者都能够从本书中获益。对于Android初学者而言,可以着重阅读本书对Android设计思想、组件机制、UI框架的介绍,增强对Android底层机制的理解,这对于日后开发更高效、可靠的Android应用,必将有所裨益。

而对于具有丰富Android开发经验、对Android基础框架有很深认识的资深开发者而言,可以在本书中寻找针对具体问题给出的一些解决策略,相信这些策略会对解决开发中的实际问题有所帮助。小贴士 这是一则小贴士,所谓小贴士,就是对相关内容进行扩展介绍,或者是加入一些个人的理解。

如何阅读本书

从本书的结构来看,前三部分包含的内容对于大部分开发者都适用,可以逐节进行阅读;而第四部分包含的内容则可以结合具体问题有选择地进行阅读。

本书在介绍内容的过程中,会涉及Android中的具体Java类,在首次提及时会使用完整的类名进行描述,如android.app.Activity,而在之后再次提及时则会略去全部的包信息,仅使用类名,如Activity,以节约篇幅便于阅读。

与之类似,本书会将一些英文的专有名词翻译成中文,在首次提及时会使用中英文对照的方式,如界面组件(Activity),而再次涉及时则会直接使用中文名称,如界面组件。

本书几乎没有完整的代码实例(具体的实例来源会给出对应的链接或描述),只有从中截取并改良过的代码片段,其描述风格如下:

// 这是一段示例代码,在代码的重要位置,会用注释给出解释

String hello = "Hello, "; // 重要的变量、函数会用粗体表示

String user_name = GetUserName(); // 一些虚拟的函数、变量,会用斜体表示... // 一些略去的实现细节,会用省略号表示

此外,本书会穿插一些小贴士,提供相关联的知识内容,小贴士的格式形如:

小贴士

这是一则小贴士,所谓小贴士,就是对相关内容进行扩展介绍,或者是加入一些个人的理解。

资源及勘误

由于个人能力的局限,虽已竭尽所能,但在本书中对于一些问题的理解难免会有所纰漏,给出的一些解决方案也可能会有缺陷,敬请读者海涵。如在阅读过程中发现问题或者有所疑问需要讨论,可发邮件至我的邮箱作者邮箱:duguguiyu@gmail.com。,所有关于本书内容的勘误会在个人博客作者博客:http://flyvenus.net。上不断更新。