新書推薦:

《
经典与想象:中国古代传说新解
》
售價:HK$
85.8

《
祠堂与教堂:中西传统核心价值观比较研究(第3版)
》
售價:HK$
118.8

《
极简德国东方看世界·极简德国史
》
售價:HK$
74.8

《
舌尖上的中国新编视频版营养师妈妈教你做婴幼儿餐
》
售價:HK$
63.8

《
Scratch创意编程进阶:多学科融合编程100例
》
售價:HK$
107.8

《
纯粹·一枕书梦
》
售價:HK$
79.2

《
新版-零基础茶艺入门
》
售價:HK$
38.5

《
创业思维:从0到1的实战笔记
》
售價:HK$
76.8
|
編輯推薦: |
这是Google认证的Android方向开发专家撰写的一本专著,源于作者10年大厂的一线开发经验。全书没有无用的理论介绍,所有内容均从底层原理和一线实践两个维度对性能优化的方方面面进行深度解读。本书基于 Android 14 撰写,提供全部源码下载(具体下载方式见前言)。
|
內容簡介: |
这是一本深度解读Android性能优化底层原理并给出可落地的一线实践指导的专业技术书。书中不仅原理讲解透彻,而且会给出很多基于读者实际工作成绩的实战案例。本书共分为11章,其中第1章总体介绍Android性能优化的背景、本质、方法论和落地方向,第2~10章从原理和实战两个层面分别对内存优化、速度优化、稳定性优化、包体积优化及其他优化进行解读。最后一章是作者多年优化从业经验的总结。
|
關於作者: |
现为字节跳动资深 Android 开发工程师,负责飞书客户端性能品质优化工作。熟悉 Android 和 Linux 系统底层原理,擅长性能优化。曾任职于腾讯、阿里巴巴,有丰富的项目性能优化和架构经验。谷歌开发者社区深度参与者(多次进行技术分享),谷歌认证的国内Android方向的GDE(谷歌开发者专家,目前国内仅有12位Android方向的谷歌开发者专家)之一。
|
目錄:
|
目 录 Contents
前 言
引言 如何才能做好性能优化 1
第1章 内存优化原理 8
1.1 虚拟内存 9
1.1.1 为什么需要虚拟内存 9
1.1.2 什么是虚拟内存 10
1.1.3 ELF文件 11
1.1.4 虚拟内存申请和释放 14
1.1.5 虚拟内存到物理内存 16
1.2 内存数据的组成 17
1.2.1 maps文件 17
1.2.2 Java堆内存 18
1.2.3 Native内存 26
1.3 内存优化方法论 26
1.3.1 及时清理数据 26
1.3.2 减少数据的加载 27
1.3.3 增加内存大小 29
第2章 内存优化实战 30
2.1 Java内存泄漏检测 31
2.1.1 手动分析 31
2.1.2 自动分析 36
2.2 Native内存泄漏检测 40
2.2.1 拦截malloc和free函数 40
2.2.2 获取Native堆栈 50
2.2.3 Native堆栈信息还原 51
2.2.4 开源工具介绍 55
2.3 Bitmap治理 55
2.3.1 字节码操作 56
2.3.2 超大Bitmap优化 61
2.3.3 Bitmap泄漏优化 65
2.4 线程栈优化 66
2.4.1 线程创建流程 67
2.4.2 减少线程数量 69
2.4.3 减小线程默认的栈
空间大小 70
2.5 默认webview内存释放 72
2.5.1 通过maps文件寻找地址 73
2.5.2 通过系统变量寻找地址 75
第3章 速度与流畅性优化原理 81
3.1 CPU 81
3.1.1 CPU的结构 82
3.1.2 CPU的工作流程 82
3.1.3 汇编指令 84
3.2 缓存 84
3.2.1 缓存的结构 84
3.2.2 寄存器 85
3.2.3 高速缓存 86
3.2.4 主存 86
3.3 任务调度 86
3.3.1 进程与线程的状态 87
3.3.2 进程调度 88
3.3.3 协程和线程 89
3.4 速度与流畅性优化方法论 90
3.4.1 提升CPU执行效率 90
3.4.2 提升缓存效率 92
3.4.3 提升任务调度效率 92
第4章 速度与流畅性优化实战 93
4.1 充分利用CPU闲置时刻 94
4.1.1 proc文件方案 94
4.1.2 times函数方案 98
4.2 减少CPU的等待 100
4.2.1 锁等待优化 100
4.2.2 I/O等待优化 108
4.3 绑定CPU大核 110
4.3.1 线程绑核函数 111
4.3.2 获取大核序列 111
4.4 GC抑制 113
4.4.1 GC的执行流程 114
4.4.2 抑制GC执行的方案 120
4.5 缓存策略优化 126
4.5.1 常用的淘汰策略 127
4.5.2 LFUCache 128
4.6 Dex类文件重排序 131
4.6.1 局部性原理 131
4.6.2 Redex使用流程 132
4.7 提升核心线程优先级 133
4.7.1 调整线程优先级的方式 134
4.7.2 需要调整优先级的线程 135
4.8 线程池优化 137
4.8.1 默认的线程池创建方式 137
4.8.2 线程池配置解析 139
4.8.3 线程池类型及创建 141
4.8.4 线程池监控 147
第5章 稳定性优化原理 152
5.1 ANR 153
5.1.1 ANR的类型 153
5.1.2 常见的ANR归因 168
5.2 Crash 169
5.2.1 Java Crash 169
5.2.2 Native Crash 172
5.3 稳定性优化方法论 174
第6章 稳定性优化实战 176
6.1 Native Crash监控方案 177
6.1.1 异常信号捕获 177
6.1.2 获取Native堆栈 178
6.1.3 使用开源库 182
6.2 ANR监控方案 188
6.2.1 信号捕获检测方案 188
6.2.2 AMS接口检测方案 191
6.2.3 抓取Trace文件 192
6.2.4 使用开源框架 193
6.3 OOM监控方案 193
6.3.1 Hprof文件结构 194
6.3.2 Hprof裁剪方案 197
6.3.3 使用开源框架 198
6.4 Native Crash分析思路 198
6.4.1 初步分析 199
6.4.2 堆栈分析 200
6.4.3 指令分析 200
6.5 ANR分析思路 201
6.5.1 初步分析 202
6.5.2 性能分析 203
6.5.3 直接和间接分析 205
6.6 慢函数监控 206
6.6.1 慢函数检测方法 206
6.6.2 主线程方法插桩 207
第7章 包体积优化原理 208
7.1 APK组成分析 208
7.1.1 dex文件 209
7.1.2 资源和so库文件 210
7.2 APK包构建流程 212
7.2.1 编译和打包流程 213
7.2.2 Gradle任务 216
7.3 包体积优化方法论 218
第8章 包体积优化实战 220
8.1 精简资源 222
8.1.1 删除无用资源 222
8.1.2 删除重复图片 224
8.1.3 混淆文件名 232
8.1.4 使用开源工具 233
8.2 精简dex文件 233
8.2.1 删减无用的代码 233
8.2.2 开启编译优化 236
8.2.3 dex重排 238
8.2.4 移除行号信息 239
8.3 精简so库 244
8.3.1 删除无用代码 244
8.3.2 删除冗余的so文件 245
8.3.3 删除符号信息 245
8.4 压缩dex文件 246
8.5 压缩so库 249
8.5.1 官方方案压缩so 249
8.5.2 自定义方案压缩so 249
8.6 动态加载资源文件 252
8.6.1 资源加载原理 253
8.6.2 动态加载资源 260
8.7 动态加载类文件 262
8.7.1 类加载原理 262
8.7.2 动态加载类 267
8.8 动态加载so库文件 267
8.8.1 so库加载原理 267
8.8.2 动态加载so库 270
8.9 动态加载四大组件 271
8.9.1 Activity启动流程 271
8.9.2 启动拦截 285
8.9.3 方法重定向 290
8.9.4 开源插件化框架 291
第9章 其他优化 292
9.1 耗电优化 293
9.1.1 耗电统计原理 293
9.1.2 耗电监控 301
9.1.3 耗电治理 305
9.2 流量优化 306
9.2.1 流量消耗监控 306
9.2.2 流量分类 310
9.2.3 流量优化 312
9.3 磁盘占用优化 313
9.3.1 磁盘监控 313
9.3.2 存储目录 314
9.3.3 磁盘优化 315
9.4 降级优化 316
9.4.1 性能指标采集和异常判断 317
9.4.2 降级任务的添加和调度 318
9.4.3 降级框架的效果度量 319
9.4.4 方案实现 320
|
內容試閱:
|
前 言
为何写这本书
Android 性能优化的重要性体现在能为程序带来更大的价值及帮助 Android 开发者增强职业竞争力这两个方向上。
性能优化可以提升程序的稳定性、运行速度和流畅性,从而提高用户满意度,增加用户的留存率,促进业务增长。对于大中型公司来说,每个程序都会有专门的性能品质团队来负责优化性能,由此可见性能优化对提升程序价值的重要性。
对于Android开发者来说,掌握性能优化技术可增强职业竞争力,并有更好的职场表现。在平时的工作中,大多数人只关注基本的业务需求,很少有人关注业务需求之上的体验需求,所以开发者若是能具备很强的性能优化能力,就可以通过产品为业务带来更多的额外价值,那么自然就能获得更高的认可。另外,在面试中,性能优化也是必考内容,它是开发者高阶技术实力的体现,擅长性能优化的开发者更容易,在面试中脱颖而出,从而提升面试的成
功率。
网络上有很多与性能优化相关的文章,市面上也有不少与性能优化相关的书籍,但是其中所讲的内容大都是一个个具体的性能优化案例,看完这些案例后,我们仅知道了在某个具体场景下怎么做。但是在实际开发中,我们面对的场景是多样且复杂的,不同的业务类型、不同的性能设备都会导致性能优化方法的不同。因此,很多时候我们会因为无法在网上找到同样场景的优化方案,而不知道从哪里开始下手,或者即便找到了类似的场景,并参考别人的方案制定了自己的优化方案,但是最终的优化效果很差,甚至可能出现优化方案根本无法落地的情况。
基于此,笔者决定写一本关于Android性能优化的图书。笔者拥有丰富的Android性能优化经验,先后负责过快应用引擎、飞书客户端等多个大型Android应用的性能优化工作。在多年的性能优化工作中,笔者总结了大量的经验和技巧,并经过两年的提炼和总结,形成了一套完整的性能优化体系。
笔者认为,要想做好性能优化,仅通过博客等网络渠道进行零碎学习是不够的,而是需要扎实且成体系地学习硬件、系统、应用等多个层面的知识点。所以本书不仅会讲解具体的性能优化实例,还会深入讲解实现性能优化需要具备的知识体系。笔者希望读者基于本书所讲的知识体系和经验,能够构建出自己的性能优化方法论,真正了解性能优化的本质,从而能够根据具体场景灵活制定性能优化方案。
本书特色
相较于其他同类图书或者网络文章,本书具有如下特色。
直指本质:针对所有性能问题,本书都从底层原理进行剖析,帮助读者理解出现类似问题的根本原因。
实战性强:本书所有内容都来自笔者多年的实际工作总结和思考,以落地实操为最终目标,可以帮助读者真正解决实际工作中遇到的问题。
内容全面:本书包含内存优化、速度和流畅性优化、稳定性优化、包体积优化、耗电优化、磁盘占用优化、流量优化等典型优化内容,覆盖了应用层、系统层、硬件层等多个维度。
体系性强:本书力求构建出一套性能优化方法论,这套方法论可以帮助读者从多个角度思考性能优化问题,从而灵活构建可以满足自己场景需求的性能优化方案。
案例丰富:本书给出了大量涉及应用层、系统层、硬件层等多个维度的针对监控和优化等环节的具体案例。
基于Android 14 撰写:本书主要基于Android 14进行讲解,这样可以确保读者所学的知识点都是较新的。但是,出于兼容性考虑,实际工作中往往要基于各个系统版本来做性能优化,所以本书也会涉及 Android 14以外的其他Android版本的源码。
提供全部源码下载:因为很多问题都是通过示例程序讲解的,所以书中涉及大量源码,对这些源码均提供了完整下载,下载链接为https://github.com/helsonzhao/android_performance。
本书读者对象
本书适合以下读者阅读。
初级Android开发者:这部分读者虽然主要精力放在基本业务需求上,但是要想快速成长并跑赢竞争对手,不可错过本书。
中级Android开发者:这部分读者在日常工作中已经开始关注性能问题,本书是他们突破瓶颈、高质量完成开发工作的最佳选择。
所有从事性能优化工作的人员:除了Android性能优化相关从业者,其他操作系统的性能优化人员也可以通过本书学到性能优化的原理和方法,这些原理和方法其实并不局限于具体的平台或者系统,而是相通的。
对Android底层原理感兴趣的读者:本书剖析了大量Android底层源码,读者可以通过这部分内容深入理解Android底层原理。
如何阅读本书
对于初级Android开发人员,建议重点研读原理部分,这些知识点能帮助这部分读者建立完整的知识体系,有了这些知识,便可以轻松应对日常开发工作。至于实战部分,这部分读者可以在之后的开发工作中慢慢地阅读和实践。
对于中级Android开发人员,因为性能优化工作是其日常工作中的重要组成部分,所以建议从前到后通读全书,全方位了解 Android 性能优化知识。书中有不少优化案例用到了比较复杂的技术,如 Native Hook 技术、字节码插桩等,这些技术是Android进阶要掌握的知识点,可以帮助这部分读者在技术方面更上一层楼。
对于其他读者,建议选择自己喜欢或者需要的章节进行针对性阅读。
致谢
感谢太太张艺,由于本书的内容较多,专业性较强,很多时候笔者都怀疑自己是否能够完成本书的写作,是你的鼓励才让笔者坚持下来。
还要感谢许多活跃在技术社区的朋友们,感谢大家提出的建议和长期以来对笔者的支持,希望本书能够不辜负你们的期望。
|
|