第1章 Android平板和智能手机开发 1
1.1 Android是一个Java操作系统 2
1.2 工具和第一个Android应用程序 2
1.2.1 前提条件和准备工作 2
1.2.2 工具链测试驱动 4
1.3 一个代码库适应所有设备类型 4
1.3.1 以代码框架示例为起点 5
1.3.2 自动适应屏幕尺寸 10
1.4 组件、视图和生命周期 10
1.4.1 销毁并重建组件 11
1.4.2 MainActivity类 11
1.4.3 活动:用户交互的基本单元 11
1.4.4 Fragment:组织代码和UI的工具 16
1.4.5 PickFragment类 17
1.4.6 ItemFragment类 21
1.4.7 ItemDetailFragment类 24
1.5 整合Activity、Fragment和Action Bar 24
1.5.1 TabbedActivity类 25
1.5.2 针对大平板电脑的Main.xml文件 27
1.5.3 针对较小屏幕的main.xml和Subsidiary活动 28
1.5.4 TabActivity类 29
1.6 Android任务和进程模型 33
1.6.1 启动Dalvik实例 33
1.6.2 死亡,但没有变形 34
1.6.3 跨应用程序和进程的任务 35
1.7 多处理、安全性以及生命周期 35
1.8 声明应用程序属性 36
1.9 本章小结 37
第2章 关系模型和SQLite 39
2.1 数据库和关系模型 40
2.1.1 RDBMS的历史 40
2.1.2 关系模型 41
2.1.3 DBMS的其他功能 43
2.1.4 SQL语言 44
2.2 SQLite入门 48
2.2.1 SQLite命令行 48
2.2.2 SQLite数据库示例 53
2.3 本章小结 57
第3章 Android数据库支持 59
3.1 Java中的SQL:SQLiteDatabase类 59
3.1.1 基本的SQL嵌入 60
3.1.2 SQL语法 61
3.1.3 创建数据库:SQLiteOpenHelper类 67
3.1.4 管理数据库 71
3.2 游标、加载器和适配器 73
3.2.1 游标 73
3.2.2 适配器和视图绑定器 75
3.2.3 加载器 78
3.3 本章小结 81
第4章 内容提供器 83
4.1 使用内容提供器 84
4.1.1 名为URI的虚拟数据集 84
4.1.2 内容解析器:客户和提供器之间的联系 85
4.1.3 内容观察者:完成循环 86
4.1.4 IPC:系统范围可访问性 89
4.2 合约:URI和类型 89
4.2.1 授权 91
4.2.2 虚拟表的URI 92
4.2.3 返回值的MIME类型 93
4.2.4 权限 94
4.2.5 发布合约 94
4.3 实现内容提供器 94
4.3.1 创建内容提供器 95
4.3.2 返回类型和URI匹配器 96
4.3.3 写数据库 97
4.3.4 数据库查询 100
4.3.5 再论内容观察者 104
4.4 权限和注册 105
4.5 内容提供器和文件 107
4.6 本章小结 112
第5章 REST、内容提供器、并发性、网络和同步适配器 113
5.1 REST基础 114
5.1.1 使用REST的理由 114
5.1.2 HTTP协议中REST的应用 116
5.1.3 REST API示例 118
5.1.4 联系人表示方式 118
5.1.5 联系方法和URI 119
5.1.6 联系人事务 120
5.2 Android网络 123
5.2.1 Apache库 123
5.2.2 java.net库 124
5.2.3 权限 125
5.3 考虑并发性和生命周期 126
5.3.1 Android并发性架构 126
5.3.2 原生请求 127
5.4 健壮网络的架构 128
5.4.1 方法1:以服务为中心 129
5.4.2 方法2:以内容提供器为中心 131
5.4.3 方法3:以同步适配器为中心 132
5.4.4 Android内部的REST 133
5.4.5 restfulCachingProviderContacts项目:一个客户端示例 133
5.4.6 添加联系人 135
5.5 使用同步适配器 140
5.5.1 Android账户管理 140
5.5.2 创建同步适配器 151
5.6 本章小结 160
第6章 服务开发 163
6.1 服务开发的选择 164
6.1.1 请求的生命周期 164
6.1.2 三层服务架构 165
6.1.3 服务开发背景 166
6.2 为contacts构建REST风格的服务 168
6.2.1 一个传统的软件架构 168
6.2.2 编写示例:Spring Contacts服务及其同步变体 170
6.2.3 示例代码:Spring同步联系人服务 191
6.3 本章小结 198
第7章 移动和云计算 201
7.1 云性能和可伸缩性 202
7.1.1 移动的规模 202
7.1.2 云计算的持久性:从SQL到NoSQL 204
7.1.3 数据库文件格式 206
7.1.4 NoSQL的持久性 208
7.2 可扩展持久性的设计考虑事项 210
7.3 查看主流的云服务供应商 213
7.3.1 Amazon AWS 213
7.3.2 谷歌应用程序引擎 214
7.3.3 Joyent:托管MongoDB+node.js 214
7.3.4 Red Hat OpenShift 214
7.4 探讨代码示例 215
7.4.1 再论联系人DAO接口 215
7.4.2 编写代码:Amazon Contacts Service 216
7.4.3 编写代码:Google App Engine联系人 230
7.5 本章小结 238
第8章 基于设备的复杂数据:Android Contacts 241
8.1 PIM数据库:史前智能手机的化石 242
8.2 Android的Contacts提供器 242
8.3 ContactsContract API 242
8.4 Contacts提供器浏览器 243
8.4.1 用于浏览数据库的代码 245
8.4.2 Contacts提供器浏览器的源代码 245
8.5 本章小结 258
第9章 通用数据同步:Migrate项目和WebData API 259
9.1 WebData和Migrate项目介绍 260
9.1.1 Migrate项目的工作原理 260
9.1.2 Migrate项目如何简化移动端连接到企业的过程 261
9.1.3 详述WebData API 262
9.1.4 WebData API REST风格的协议 262
9.2 Migrate项目的细节 272
9.2.1 Migrate项目Android WebData客户端 272
9.2.2 Android Migrate项目特性 273
9.3 WebData内容提供器Android API 274
9.3.1 Android内置提供器API 274
9.3.2 Migrate提供器API 275
9.4 本章小结 275
第10章 WebData应用程序 277
10.1 Migrate客户端 278
10.2 创建一个Migrate项目 279
10.2.1 步骤1:导入项目 279
10.2.2 步骤2:启用该项目作为一个Migrate客户端 279
10.2.3 步骤3:定义由Migrate管理的信息 280
10.2.4 步骤4:生成联系人合约 281
10.3 与Migrate REST代理交互 285
10.3.1 第5步:启动一个本地Migrate服务 290
10.3.2 第6步:发布应用程序的模式 290
10.4 配置设备 292
10.4.1 第1步:安装Migrate客户端 292
10.4.2 第2步:添加WebData账户 293
10.4.3 第3步:开启同步 294
10.4.4 第4步:运行应用程序 294
10.4.5 第5步:在Migrate Contacts中配置一个账户(可选) 294
10.5 未来的发展方向:MigrateClinic 295
10.6 本章小结 298
第11章 为数据构建人性化界面 301
11.1 相对于“菜谱”方式的模块化和灵活性 302
11.1.1 模块的概述 302
11.1.2 布局的改变 302
11.2 直接操作 304
11.2.1 TabbedActivity类 304
11.2.2 TabbedPagedFragment类 315
11.3 导航 316
11.3.1 小屏幕环境中的多任务 316
11.3.2 Android任务模型 316
11.3.3 任务和传统的进程模型 317
11.3.4 修改任务行为 317
11.3.5 在平板电脑中的导航 319
11.4 选择使用Support Package 319
11.5 本章小结 320
第12章 安全 321
12.1 平台安全 322
12.2 保持手机安全 322
12.2.1 避免恶意应用程序 323
12.2.2 了解恶意软件机制:Malware Genome 326
12.3 编写安全应用程序 327
12.3.1 黑客攻击目标 327
12.3.2 安全应用程序的要素 328
12.3.3 示例代码:保护REST风格调用 347
12.3.4 防止盗版 360
12.4 本章小结 361