所有分类
  • 所有分类
  • 电子书
  • 电子杂志订阅下载

Android开发精要

  如何才能写出贴近Android设计理念、能够更加高效和可靠运行的Android应用?通过Android的源代码去了解其底层实现细节是重要的方法之一!然而,Android系统太过于庞大,源代码实现复杂,学习的技术门槛和时间成本都很高。有没有一种方法既能帮助开发者深入理解Android应用开发,又能不被底层大量的实现细节所羁绊,迅速掌握编写高质量Android应用所需的知识?《Android开发精要》针对这个问题给出了完美的答案!它从Android繁杂的源代码中抽取出了Android开发的“精华”和“要点”,剥离了大量琐碎的底层实现细节,进行了高度概括和总结,不仅能帮助开发者迅速从宏观上理解整个Android系统的设计理念,而且能帮助开发者迅速从微观上掌握核心知识点的原理,从而编写出高质量的Android应用。
《Android开发精要》共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底层对资源的处理。第4部分(9-13章):第9章讲解了Android的数据存储结构,以及不同数据存储模式的使用要点;第10章分析了Android的各种网络连接方式,涵盖NFC和基于Wifi的P2P连接等内容;第11章讲解了Android的定位服务、地址解析服务、地图服务的框架实现;第12章仔细分析了Android各种多媒体功能的实现机制;第13章对Android中比较有特色的一些模块的实现细节进行了分析

作者简介

  范怀宇,资深Android开发工程师,毕业于清华大学,从事移动开发多年,对Android系统有颇为深入的研究,开发经验十分丰富。曾就职于网易有道,负责完成了有道词典Android版、网易掌上邮Android版、网易八方Android版等项目的开发工作,现就职于豌豆实验室,负责豌豆荚2.0版本的设计和开发。很早开始从事Android开发,曾参加ADC1大赛。关注新技术,喜欢阅读源码和写技术文章,活跃于博客园、Chrome开发群和Top Language讨论组等多个社群组织。

精彩书评

  要成为真正的Android开发高手,要开发出高质量的Android应用,必须对Android系统的实现原理和工作机制有较深入的理解。然而,整个Android系统非常庞大且错综复杂,要通过源代码理解它,不仅需要较深技术功底,而且需要投入大量时间,门槛和成本都非常高。为了让基础不那么扎实又没有充足时间去研究Android源代码的读者也能明白它的原理,本书对它的原理进行了高度概括和抽象,不仅能使读者迅速掌握Android系统的工作机制,而且还能深刻理解系统中各核心模块和服务的实现原理,对希望迅速提高应用开发水平的读者非常有帮助,强烈推荐!
——51CTO移动开发频道

目录

前言
致谢

第1章 Android的系统架构
1.1 Android系统架构概况
1.1.1 应用层
1.1.2 框架层
1.1.3 运行时
1.1.4 核心类库
1.1.5 硬件抽象层和Linux内核
1.2 Android的核心功能模块
1.2.1 界面框架
1.2.2 数据存储
1.2.3 网络通信
1.2.4 地理信息
1.2.5 图形和多媒体处理
1.2.6 外部设备
1.2.7 特色功能模块
1.3 Android的架构特征和设计思想
1.3.1 平台开放性
1.3.2 基于组件的应用设计
1.3.3 基于网络服务的平台
1.4 小结

第2章 Android源代码的下载和编译
2.1 Android源代码的获取和编译
2.1.1 环境搭建
2.1.2 源代码获取
2.1.3 源代码的编译
2.2 Android源代码结构
2.2.1 框架层源代码目录frameworks
2.2.2 应用层源代码目录packages
2.2.3 其他源代码目录
2.3 Android源代码的阅读和编辑
2.3.1 用Eclipse阅读源代码
2.3.2 反馈Bug
2.3.3 提交修改
2.4 小结

第3章 Android组件模型解析
3.1 基于Mashup的应用设计
3.1.1 Android中的Mashup
3.1.2 基于Mashup的Android应用模型
3.1.3 基于Mashup的应用架构特征
3.2 界面组件Activity解析
3.2.1 界面组件的功能和特征
3.2.2 界面组件的开发
3.2.3 界面组件的数据结构
3.3 服务组件Service解析
3.3.1 服务组件的功能和特征
3.3.2 服务组件的开发和使用
3.3.3 服务组件的进程间通信模型
3.4 触发器组件Broadcast Receiver解析
3.4.1 触发器组件的功能和特征
3.4.2 触发器组件的使用
3.4.3 广播事件的发送
3.5 数据源组件Content Provider解析
3.5.1 数据源组件的定位和操作
3.5.2 数据源组件的开发
3.5.3 数据源组件的实现细节
3.6 应用配置文件解析
3.6.1 权限配置
3.6.2 环境配置
3.6.3 应用和组件配置
3.7 小结

第4章 Android的Intent机制
4.1 Intent对象的作用和构成
4.1.1 Intent对象的作用
4.1.2 Intent对象的构成
4.1.3 Intent对象解析
4.1.4 Intent Filter对象
4.2 意图匹配
4.2.1 意图匹配的算法流程
4.2.2 匹配组件的选择
4.2.3 意图匹配的优化
4.3 意图机制的应用
4.3.1 意图机制在界面组件中的应用
4.3.2 意图机制在服务组件中的应用
4.3.3 意图机制在触发器组件中的应用
4.4 小结

第5章 组件生命周期解析
5.1 应用进程模型
5.1.1 应用、组件和进程
5.1.2 组件的应用进程配置
5.2 应用进程托管
5.2.1 为什么需要进程托管
5.2.2 进程优先级
5.2.3 进程回收算法
5.2.4 进程的强行终止
5.2.5 掌控进程的优先级
5.3 组件的生命周期模型
5.3.1 界面组件的生命周期
5.3.2 服务组件的生命周期
5.3.3 触发器组件的生命周期
5.3.4 数据源组件的生命周期
5.3.5 应用环境的生命周期
5.4 任务和界面组件栈
5.4.1 界面组件的运行模式
5.4.2 组件的任务黏度
5.4.3 实际应用中的任务控制
5.5 小结

第6章 组件间的数据传输
6.1 利用Intent对象进行数据传输
6.1.1 利用Intent对象回传数据
6.1.2 利用Intent对象传递数据的优缺点
6.2 利用文件进行数据共享
6.2.1 利用文件进行数据共享的实现
6.2.2 利用文件进行数据共享的优缺点
6.3 利用应用环境的全局数据共享
6.3.1 利用应用环境对象共享数据的实现
6.3.2 利用应用环境对象共享数据的优缺点
6.4 利用组件共享数据
6.4.1 利用数据源组件共享数据
6.4.2 利用服务组件共享数据
6.5 小结

第7章 Android控件解析
7.1 Android的控件框架
7.1.1 Android控件构成
7.1.2 Android交互事件传输
7.1.3 Android控件属性
7.1.4 控件的丈量和绘制
7.2 Android的窗口机制
7.2.1 窗口机制的基本原理
7.2.2 界面组件和窗口
7.2.3 对话框
7.2.4 弹出窗口
7.3 Android的基本控件介绍
7.3.1 文本控件
7.3.2 图像控件
7.3.3 Surface控件
7.3.4 Layout控件
7.3.5 适配器控件
7.3.6 选项卡控件
7.3.7 浏览器控件
7.4 自定义控件
7.4.1 控件的定制
7.4.2  复合控件
7.4.3 自绘控件
7.5 Android界面新发展
7.5.1 动作栏
7.5.2 界面片段
7.5.3 重新定制选项卡
7.5.4 交互界面的适配
7.6 小结

第8章 应用资源
8.1 Android应用资源体系
8.1.1 Android的应用资源构成
8.1.2 应用资源的适配
8.1.3 应用资源的动态匹配
8.2 应用资源的调用
8.2.1 应用资源的编译和R类
8.2.2 应用资源的管理
8.2.3 使用应用资源
8.3 应用资源的类型
8.3.1 界面和样式
8.3.2 字符串和常量
8.3.3 图像、图形和动画
8.3.4 其他资源文件
8.4 小结

第9章 数据存储
9.1 Android的文件系统
9.1.1 Android的目录结构
9.1.2 Android的应用数据存储
9.1.3 Android的文件操作
9.2 使用设置文件
9.2.1 设置文件的存储和使用
9.2.2 设置界面组件
9.3 使用数据库
9.3.1 Android数据库实现
9.3.2 Android数据库的使用
9.4 存储在云端
9.4.1 云端存储的架构
9.4.2 云端存储的使用
9.5 小结

第10章 网络通信
10.1 Web通信
10.1.1 基于HTTP的网络连接
10.1.2 联网方式的选择
10.1.3 WiFi的管理
10.2 蓝牙
10.2.1 Android的蓝牙实现
10.2.2 基于蓝牙的通信
10.3 近场通信
10.3.1 基于NFC的识别和通信
10.3.2 基于NFC的点对点通信
10.4 基于WiFi连接的P2P通信
10.4.1 Android 4.0的P2P连接实现
10.4.2 使用Socket进行数据传输
10.5 小结

第11章 地理信息服务
11.1 Android的定位服务
11.1.1 定位服务框架
11.1.2 位置信息源
11.1.3 定位选择
11.1.4 定位实例
11.2 Android的地址服务
11.2.1 地址服务的框架
11.2.2 使用地址服务
11.3 Android的地图服务
11.3.1 使用地图
11.3.2 其他使用地图服务的方式
11.4 小结

第12章 多媒体处理
12.1 Android的图像处理
12.1.1 图像的表示
12.1.2 图像的读取和输出
12.1.3 图像的呈现
12.1.4 图像的管理
12.2 Android的音视频处理
12.2.1 Android音视频的支持框架
12.2.2 Android音视频的播放
12.2.3 Android音视频的录制
12.3 Android中相机的使用
12.4 小结

第13章 其他重要模块
13.1 通话和短信
13.1.1 Android的通话和短信框架
13.1.2 通话的处理
13.1.3 短信的发送和接收
13.2 App Widget的使用和实现
13.2.1 Android的App Widget框架
13.2.2 App Widget的界面构造和Remote Views
13.2.3 App Widget的事件处理和Pending Intent
13.3 Android的应用内搜索
13.3.1 Android应用内搜索实现框架
13.3.2 为应用定制搜索功能
13.3.3 全局搜索功能
13.4 Android的全局通知机制
13.4.1 全局通知的类型和实现
13.4.2 Toast的使用
13.4.3 状态栏通知
13.5 Android联系人处理
13.5.1 Android联系人数据存储框架
13.5.2 Android联系人操作
13.6 小结

精彩书摘

  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不常用在跨应用的通信中,而仅应用于内部组件的通信。
……

前言/序言

  为什么要写这本书
一直觉得我和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(); // 一些虚拟的函数、变量,会用斜体表示
… // 一些略去的实现细节,会用省略号表示
此外,本书会穿插一些小贴士,提供相关联的知识内容,小贴士的格式形如:
小贴士 这是一则小贴士,所谓小贴士,就是对相关内容进行扩展介绍,或者是加入一些个人的理解。
资源及勘误
由于个人能力的局限,虽已竭尽所能,但在本书中对于一些问题的理解难免会有所纰漏,给出的一些解决方案也可能会有缺陷,敬请读者海涵。如在阅读过程中发现问题或者有所疑问需要讨论,可发邮件至我的邮箱,所有关于本书内容的勘误会在个人博客上不断更新。
致 谢
两年前的一天,本书的策划编辑杨福川在我的博客上看到了本书最雏形的一些文字,便极力邀请并最终促成了这本书。感谢福川在两年多的时间里一直鼓励着我,容忍着我无限期的“跳票”,帮我整理思路继续前行,感谢他和他的同事白宇、王晓菲、曾珊帮我打磨每一行文字,整理每一张图片,没有他们的专业和坚持就不会有本书的最终完稿,感谢你们,感谢机械工业出版社。
也要感谢我的前东家网易有道,是它给我机会来开发诸如有道词典这样拥有大量用户的Android应用,在这个过程中我积累了大量的实践经验,这是我能够完成本书的技术基础。
更要感谢豌豆实验室和所有的豌豆们,这是我正为之奋斗的公司和一起战斗的同事们,在这里我不仅开拓了技术视野,了解了更丰富的Android技术,更重要的是,让我体会到了什么是为了理想而共同奋斗,这是鞭策我不断前进的动力。
还要感谢那些和我一起写Android代码的朋友们,徐岚、阳光元、王健飞、吴淼伟……那些我写下你们解掉的Bug,都让我从中学到了新的知识。
当然,一定要感谢我的家人,我的父母每周都会问我:“书写得怎么样了?早点休息,别太辛苦!”我想说,有你们的支持,我永远不会辛苦。感谢我的妻子张佳,本来我想拿着这本书作为我们的结婚礼物,却未曾想到,待到出版时我们已然是老夫老妻了,两年间你一直鼓励我、帮助我完成此书,感谢有你,一直陪伴在你身边,是我能为你做的。
最后,感谢所有即将阅读此书的朋友们,如果有人能从此书获益,将是我莫大的欣慰。
范怀宇
2012年5月于北京

这本书怎么样?

点击星号为它评分!

平均评分 0 / 5. 投票数: 0

到目前为止还没有评分!成为第一位为此书评分。

资源下载
书名:Android开发精要
作者:范怀宇
出版社:机械工业出版社
ISBN:9787111390589
豆瓣评分:8.1

评论0

请先