随着互联网用户渗透率的提升,中国移动互联网进入了平稳发展阶段。在存量市场下,企业能否提供更优质的用户体验,成为影响其用户规模的重要因素,因此,“丰富的性能优化经验”等描述在高级职位的要求中频繁出现。很多人对性能优化感兴趣,因其不仅有技术挑战,在面试中也经常被提及。然而,对于没有经验的人来说,这个概念比较空泛,既不清楚其具体涵盖内容,也担心自己是否能掌握到足够的深度。如果你有同样的困惑,那么这本书能给你答案。读完本书之后,你会豁然开朗,对性能优化胸有成竹。
这是一本针对Android App性能优化的书,首先描述从事性能优化测试相关工作需要具备的能力,然后介绍性能优化和性能测试的组成环节,最后深入地讲解内存、流畅性和启动优化的具体方案。
本书适合想要或正在从事Android开发工作的读者,特别是从事Android性能测试和优化相关工作的读者阅读。
多年Android App优化经验总结;
全面剖析Android App性能优化技术;
详尽的代码拿来就用;
全面讲解为什么优化、如何优化;
深入剖析安卓性能优化的理论、环节及关键技术(内存优化、流畅度优化、启动优化)。
张世欣(网名:拭心)
毕业于西安电子科技大学计算机专业,目前在喜马拉雅担任 Android 技术专家,曾就职于字节跳动基础架构组。在应用性能优化、性能分析工具、跨端技术等方面有丰富的开发实践经验。
坚持在社区分享内容,博客访问量达到百万人次,获得谷歌开发者专家、CSDN 博客专家和 InfoQ 签约作者等认证。
第 1篇 市场需要什么样的Android开发者
第 1章 Android开发者需要具备的能力 2
1.1 初中级开发者需要具备的能力 2
1.2 高级开发者需要具备的能力 3
1.3 资深开发者需要具备的能力 4
1.4 性能技术专家需要具备的能力 5
1.5 小结 6
思考题 6
第 2章 优秀的开发者具备的素质 7
2.1 好的学习能力是什么样的 8
2.2 好的沟通能力是什么样的 11
2.3 好的工作思维是什么样的 12
2.4 小结 13
思考题 14
第 2篇 认识性能优化和性能测试
第3章 性能优化 16
3.1 性能优化的5个环节 16
3.2 性能优化如何进行 18
3.2.1 瑞士奶酪模型 18
3.2.2 厘清目标和现状 19
3.2.3 搭建监控系统 21
3.2.4 发现问题,定位原因 26
3.2.5 设计优化方案,考虑得与失 28
3.2.6 上线验证效果 30
3.3 小结 30
思考题 31
第4章 性能测试 32
4.1 性能测试的4个环节 32
4.2 性能测试实践 33
4.2.1 测试CPU 33
4.2.2 测试GPU 35
4.2.3 测试FPS 35
4.2.4 测试文件读写情况 38
4.3 小结 39
思考题 39
第3篇 专项优化
第5章 内存优化 42
5.1 为什么要做内存优化 42
5.1.1 虚拟内存不足导致App崩溃 42
5.1.2 物理内存不足导致App后台存活时间短 44
5.1.3 GC对应用启动、流畅性的影响 45
5.1.4 小结 46
5.2 线上内存监控 46
5.2.1 内存不足导致的崩溃如何监控 46
5.2.2 后台被强制“杀掉”的问题如何监控 49
5.2.3 GC对流畅性的影响如何监控 53
5.2.4 小结 54
5.3 线下内存测试 54
5.3.1 获取App的内存指标 55
5.3.2 获取进程的内存空间数据 57
5.3.3 分析内存使用详情 59
5.4 内存优化 61
5.4.1 Java 内存问题分析、定位 61
5.4.2 Native 内存问题分析、定位 71
5.4.3 图片内存问题分析、定位 83
5.4.4 减少内存问题的有效方法 105
5.5 小结 111
思考题 112
第6章 流畅度优化 113
6.1 为什么要做流畅度优化 113
6.2 线上流畅度监控 113
6.2.1 FPS和掉帧数 113
6.2.2 主线程卡顿监控 130
6.2.3 线程运行情况监控 141
6.3 线下流畅度分析 143
6.3.1 使用开发者选项分析卡顿问题 143
6.3.2 使用 Android Studio Profiler 分析卡顿问题 146
6.3.3 使用 Systrace 分析卡顿 149
6.4 流畅度优化如何进行 152
6.4.1 增加绘制相关线程的运行时间 152
6.4.2 减少主线程非绘制任务耗时 160
6.4.3 减少绘制任务耗时 175
6.5 小结 176
思考题 177
第7章 启动优化 178
7.1 为什么要做启动优化 178
7.2 启动监控 178
7.2.1 App 的启动流程 179
7.2.2 启动监控如何进行 185
7.3 线下分析 190
7.4 启动优化如何进行 194
7.4.1 绑定大核提升启动速度 194
7.4.2 通过框架管理启动任务 198
7.4.3 减少 ContentProvider 初始化耗时 202
7.4.4 减少 .so 文件加载耗时 203
7.4.5 延迟子进程创建 204
7.4.6 低端机启动逻辑降级 205
7.5 小结 205
思考题 206