《Android开发精要》内容简介
本书如何才能写出贴近Android设计理念、能够更加高效和可靠运行的Android应用?通过Android的源代码去了解其底层实现细节是最重要的方法之一!然而,Android系统太过于庞大,源代码实现复杂,学习的技术门槛和时间成本都很高。有没有一种方法既能帮助开发者深入理解Android应用开发,又能不被底层大量的实现细节所羁绊,迅速掌握编写高质量Android应用所需的知识?《Android开发精要》针对这个问题给出了完美的答案!它从Android繁杂的源代码中抽取出了Android开发的“精华”和“要点”,剥离了大量琐碎的底层实现细节,进行了高度概括和总结,不仅能帮助开发者迅速从宏观上理解整个Android系统的设计理念,而且能帮助开发者迅速从微观上掌握核心知识点的原理,从而编写出高质量的Android应用。
范怀宇:资深Android开发工程师,毕业于清华大学,从事移动开发多年,对Android系统有颇为深入的研究,开发经验十分丰富。曾就职于网易有道,负责完成了有道词典Android版、网易掌上邮Android版、网易八方Android版等项目的开发工作,现就职于豌豆实验室 ,负责豌豆荚2.0版本的设计和开发。
作品目录
前言
为什么要写这本书
本书主要内容
本书特色
本书面向的读者
如何阅读本书
资源及勘误
致谢
第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、小结
热门书摘
Dalvik没有沿用传统的Java二进制码(Java Bytecode)作为其一次编译的中间文件,而是应用了新的二进制码格式文件.dex。在Android应用的编译过程中,它会先生成若干个.class文件,然后统一转换成一个.dex文件。在转换过程中,Android会对部分.class文件中的指令做转义,使用Dalvik特有的指令集OpCodes来替换,以提高执行效率。同时,.dex会整合多个.class文件中的重复信息,并对冗余部分做全局的优化和调整,合并重复的常量定义,以节约常量池耗费的空间。这使得最终得到的.dex文件通常会比将.class文件压缩打包得出的.jar文件更精简。
而对于开发者而言,框架层最直观的体现就是SDK,它通过一系列的Java功能模块,来实现应用所需的功能。SDK的设计决定了上层应用的开发模式、开发效率及能够实现的功能范畴。因此,对于开发者而言,关注SDK的变迁是一件很有必要的事情,SDK每个新版本的诞生,都意味着一些老的接口会被调整或抛弃,另一些新的接口和功能火热出炉。开发者不但要查看和关注那些被修改的接口,来检查应用的兼容性,并采取相应的策略去适应这些变化,更重要的是,开发者还要追踪新提供的接口,寻找改进应用的机会,甚至是寻求开发新应用的可能。
Android的每个交互界面都由一棵控件树构成。控件树中的控件(Widget)对象皆派生自android.view.View类,而其中非子节点的控件都派生自android.view.ViewGroup类,可称之为容器控件。
编写一个个独立的组件,然后通过配置文件对每个组件的需求和能力进行描述,Android系统会统一调度这些组件
与界面组件的通信连接,需要通过Intent(android.content.Intent)对象来建立;而与数据源组件的通信,则通过URI地址来定位并搭建连接通路。
C/S和B/S
MIME type
Android的每个应用进程都有一个应用环境对象(Application Context)。小数据量的共享数据可以通过它来进行存储,从而避免因数据在界面组件间连续传递而增加的额外开销和复杂性。
系统会提前将资源文件进行预编译,同时生成与应用中的资源相对应的R类。
Activity.setContentView方法,可以将相关资源信息设置到界面的内容区域中。