第1章 引言:为什么需要高性能 1
为什么应用程序的性能意味着这么多 2
手动测试和自动测试 3
ANR和软件中的延迟 3
什么会触发ANR,我该如何避免它们 4
Android架构 4
Dalvik虚拟机 5
内存管理 5
电量消耗 6
Java语言 7
NDK/在需要时进行原生开发 7
程序响应相关的3个临界值 8
软件质量的商业价值 8
总结 9
第2章 高效调试 11
ADB 11
DDMS 12
采集和分析线程信息 14
堆分析和可视化 16
Allocation Tracker 19
网络使用 20
Emulator Control 22
系统状态 23
调试UI 23
使用Hierarchy Viewer 25
Systrace 27
Android设备调试选项 29
Android即时运行 38
GPU分析器 40
使用GPU分析器进行调试 41
ClassyShark 42
开始使用 43
总结 46
第3章 打造布局 47
预览 47
渲染性能 47
屏幕撕裂和垂直同步 50
多窗口模式 57
最佳实践 63
布局概述 64
布局层级管理 64
布局复用 70
ViewStub 73
AdapterView和视图回收 74
自定义视图和布局 78
屏幕缩放 83
调试工具 84
Design窗口 84
Hierarchy Viewer 86
设备上的调试工具 90
Systrace 97
总结 101
第4章 内存 103
预览 103
内存如何工作 104
垃圾回收 104
内存共享 104
运行时 105
Android N即时编译器 106
内存泄漏 107
内存抖动 108
引用 108
内存相关的项目 109
最佳实践 111
数据类型 111
语法 117
常量 123
对象管理 124
内存设计模式 128
Android组件泄漏 137
进程 150
内存API 151
主要组件和内存管理 154
调试工具 156
LogCat 157
Activity Manager API 159
StnctMode 160
Dumpsys 162
总结 168
第5章 多线程 171
预览 171
线程基础 172
Android多线程环境 176
Android应用程序线程 177
Android线程消息 178
最佳实践 181
线程 181
HandlerThread 181
AsyncTask 183
Loader 187
Service 190
进程间通信 199
先进的技术 205
调试工具 212
StnctMode 212
总结 213
第6章 网络 215
预览 215
协议 217
方法 218
头部 218
超时 219
内容 219
响应码 220
连接类型 220
最佳实践 221
延迟测定 221
批量连接 223
对响应进行缓存 224
指数退避算法 228
轮询VS推送 230
所提供的API 231
Android N带来的新变化 236
调试工具 245
Android N网络ADB工具 245
Fiddler 246
Wireshark 247
Application Resource Optimizer 248
网络衰减 250
模拟网络加速和延迟 250
总结 254
第7章 安全 257
WhatsApp-连续出现问题 258
深入代码 260
捕获APK文件 261
从设备上拉取APK文件 261
利用Wireshark捕获APK文件 262
利用外部网站 263
剖析APK文件 264
代码注入 269
操作码 272
注入新代码 272
签名并重新构建应用程序 275
保护应用程序 276
非安全存储 279
SharedPreferences 279
内部存储 280
外部存储 282
删除文件 284
使用外部存储还是内部存储 284
数据库 285
数据库中的性能 286
SQL注入 286
ORM框架 288
OrmLite 288
SugarORM 289
GreenDAO 290
Realm 291
网络 291
通信加密 292
嗅探 292
总结 294
第8章 优化电量消耗 297
分析 297
监测电池电量和充电状态 300
识别充电状态的变化 301
确定及响应电池电量的变化 302
Doze和App Standby 303
理解Doze 303
避免无用的网络请求 304
按需对待BroadcastReceiver 306
网络 307
总结 309
第9章Android中的原生代码 311
入门——在我们的系统中配置NDK 312
JN I 313
基本概念 314
创建首个JNI程序HelloWorld-JNI 315
使用Android NDK创建一个原生Activity 320
调试NDK 323
Android.mk 326
NDK定义的变量 327
TARGET_PLATFORM 327
TARGET_ARCH 327
TARGET_ABI 328
NDK提供的宏 328
Application.mk 329
引入已存在的库 331
导出头文件 332
总结 333
第10章 提高性能的小技巧 335
位图 335
加载 336
处理 342
缓存 343
显示 348
管理内存 350
图像优化 354
分辨率 355
压缩 356
序列化 356
JSON的改进 356
JSON的替代品 358
本地序列化 365
代码改进 365
Getter和Setter 366
内部类 367
Android N中的Java 8 370
设置 370
Jack工具链 374
APK优化 375
移除未使用的代码 376
移除未使用的资源 376
总结 378