具体描述
本书旨在为Android 开发者指明提高应用程序性能的方向。
第1章就什么是高性能,为什么需要高性能展开讨论。
第2章为读者展示了一些用于调试应用程序的工具、方案以及技巧。
第3~8章,围绕着布局、内存、多线程、网络、安全、电量消耗等多个方面,阐述如何打造高性能应 用程序。
第9章相对独立,介绍的是原生开发。
第10章与前面章节的关系也不大,涵盖了一些琐碎、但对性能至关重要的小技巧,例如,图像处理、序列化、优化APK 文件,等等。
本书面向具有一定Android 开发经验,希望得到进一步提升的工程师。
作者简介
Enrique Lopez Manas 是Google 公司的一位研发专家和独立IT 顾问。他从2007 年开始学习并从事移动技术研发。他是一名狂热的开源社区贡献者,一位免费开源软件拥护者,德国排名前10 的Java 开源贡献者。他加入了Google 创业加速器计划 ,在其中参与并影响了来自全球的几百个最佳孵化项目。同时,他也是一位大数据和机器学习爱好者。业余时间,他喜欢骑自行车、摄影、旅行,直到精疲力尽。他也创作文学作品,并且喜欢各种艺术。他喜欢以第三者的视角来描写自己。你可以关注他的推特(@eenriquelopez)以获取他的最新动态。
Diego Grancini 拥有佩鲁贾大学的电信IT 工程学位。他致力于研究Android 开发超过6年的时间,领导并促成了多个项目,在他的职业生涯中,十分热衷于教授和分享他的技术。毕业后他加入了 Engineering Ingegneria Infomatica S.P.A.公司,致力于研究Java 和 Android 开发,并引领Android 开发者多年。之后他加入了摩根大通,强化了他在软件开发,尤其是Android 平台上,关于安全和性能方面的技术。
叶坤是豆瓣Android工程师,负责豆瓣FM Android客户端研发。
目录信息
为什么应用程序的性能意味着这么多 ....................................................................... 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
Android 高性能编程
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
ActivityManager API ........................................................................................ 159
StrictMode ......................................................................................................... 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
StrictMode ......................................................................................................... 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
JNI ............................................................................................................................. 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
· · · · · · (收起)
读后感
用户评价
这本书的封面设计得非常专业,那种深邃的蓝色调配上简洁的白色字体,一眼就能感受到其技术深度。我个人是那种对底层原理有执着追求的开发者,所以拿到这本书时,心里是充满期待的。我希望它能带我深入理解Android系统是如何在高性能的框架下运作的,特别是那些优化用户体验的关键点。读完前几章后,我发现作者在内存管理和并发处理上花了很多笔墨,分析得极为透彻。例如,他深入剖析了Java垃圾回收机制在Android环境下的特定挑战,并给出了实用的规避策略。这对我正在处理的一个内存泄漏问题提供了全新的思路。更让我惊喜的是,书中对渲染流程的讲解,细致到了每一帧的绘制周期和GPU的协同工作。很多市面上的书籍只是泛泛而谈,但这本却像手术刀一样,精准地切开了那些复杂的调用栈,让我能清晰地看到性能瓶颈到底藏在哪里。对于那些追求极致流畅动画和响应速度的团队来说,这本书简直就是一本“武功秘籍”,它提供的不仅仅是理论,而是可立即应用到项目中的实战技巧。我尤其欣赏作者那种“不回避复杂性”的写作态度,使得即便是初次接触这些高级主题的读者,也能通过循序渐进的阐述,最终掌握核心技术。
这本书的内容组织逻辑简直可以用“教科书级别”来形容,结构清晰,层次分明,读起来几乎没有阅读障碍。我之前在处理网络请求优化时总是感觉捉襟见肘,各种缓存策略和数据压缩技术用起来总觉得不得要领。但是,这本书提供了一个非常系统化的方法论,从网络协议层的优化开始,逐步深入到应用层的数据序列化效率对比。它不仅仅是列举了“应该用Protobuf”或者“应该使用OkHttp”,而是详细对比了不同方案在Android设备上的实际性能开销和资源消耗,这种基于数据的分析才是我真正需要的。另一个让我印象深刻的环节是关于电量优化和后台服务管理的论述。在如今用户对应用耗电越来越敏感的环境下,如何高效地利用JobScheduler、WorkManager等系统API,同时避免被系统“杀死”,是每个开发者必须面对的课题。书中对此的讲解,不仅涵盖了API的使用,更重要的是阐述了系统设计者的意图,这使得我能更好地站在“系统”的角度去思考应用的设计,从而写出更“懂事”的代码。总体而言,这本书的阅读体验是极为顺畅和充实的,仿佛有一位经验丰富的大牛全程在身边指导,不断点拨那些隐藏在API文档背后的“潜规则”。
这本书的价值,体现在它对“系统级”性能调优的深刻洞察上,这远超出了我预期的“应用层优化”范畴。很多时候,我们修复了一个UI卡顿问题,却发现是底层Binder机制的延迟导致的,这在普通教程中是很少涉及的。这本书勇敢地深入了JNI和Native层面的交互优化,详细解析了数据在Java和C++之间高效传递的最佳实践,以及如何避免不必要的跨语言边界跳转。对于我们这种需要集成复杂图形渲染库的项目来说,这部分内容简直是雪中送炭。另外,作者对于内存碎片化和页面回收机制的分析也极为深刻。他不仅解释了Android内存管理模型的演变,更重要的是,提供了在特定系统版本下,如何通过调整应用行为来“配合”操作系统的内存策略,从而实现更稳定的运行表现。我感觉,阅读完这本书,我不再只是一个API的调用者,而更像是一个能够理解系统“呼吸”的开发者。这种视角的转换,使得我在设计新模块时,就会自然而然地将资源消耗和系统开销纳入首要考量,这是一种思维上的巨大提升。
我购买这本书时,是带着一种“找茬”的心态去看的,想看看作者如何处理那些业界公认的棘手难题。结果是被它对细节的把控彻底征服了。例如,书中关于启动速度优化的章节,简直是一部史诗级的分析。它将启动过程拆解成了冷启动、温启动、热启动的每一个微小阶段,并对Application的`onCreate()`、Activity的生命周期中各个方法的耗时进行了精确的拆分和优化建议。特别值得一提的是,作者对类加载机制在启动过程中的影响进行了深入剖析,这在其他地方几乎看不到。很多优化建议都是那种“别人家的坑”——那些你只有在项目规模扩大到一定程度才会遇到的性能陷阱。通过阅读这本书,我提前预见了这些潜在问题,并提前部署了防御机制。这种“前瞻性”的知识储备,是无法通过日常的Bug修复积累起来的。这本书不仅是技术手册,更像是一份经过无数次实战洗礼后沉淀下来的“最佳实践集合”,它教会你如何构建一个能够抵抗时间考验的健壮应用。
老实说,我本来对这类技术书籍的阅读兴趣不大,总觉得那些公式和复杂的图表让人望而却步。但《Android高性能编程》这本书成功地改变了我的看法。它的叙事方式非常生动,尤其是在解释那些抽象概念时,作者总能找到非常贴切的生活化比喻。比如,书中对比不同线程池配置对CPU利用率的影响时,那个关于“工厂工人调度”的例子,让我瞬间就明白了为什么过度创建线程反而会拖慢速度。这种从宏观到微观,再回到实际代码的讲解路径,极大地降低了学习门槛。我尤其欣赏作者对“性能度量”这一环节的重视。他没有止步于告诉我们“什么快”,而是手把手教我们如何使用Profiler、Systrace等工具进行精确诊断,并建立了一套量化的评估体系。这对于项目进入后期的性能调优阶段至关重要,因为没有数据支撑的优化都是盲目的。这本书真正教会我的,不是某个特定的优化技巧,而是一套科学的、可重复的性能分析和改进流程。对于那些刚刚接触到应用性能瓶颈、感到无从下手的初中级工程师来说,这本书提供了非常坚实的“内功心法”。
很快就翻完了,内存的部门将了一些需要注意的点,其它的地方理论讲的太多,而且很浅显,能够实际操作和日出使用的地方很少。
还可以吧。
写的非常好的书,总结到位,理解深刻,希望能出新版本吧,有很多知识点落后了。
写的非常好的书,总结到位,理解深刻,希望能出新版本吧,有很多知识点落后了。
期待了好久,翻译者的心血之作!