摘要:做 Android 开发的同学们,是否遇到过这样的问题:明明功能都实现了,但是运行起来就是不流畅。要么界面操作卡顿、要么加载缓慢,有时候系统负载还莫名其妙地飚高。
做 Android 开发的同学们,是否遇到过这样的问题:明明功能都实现了,但是运行起来就是不流畅。要么界面操作卡顿、要么加载缓慢,有时候系统负载还莫名其妙地飚高。
造成这些问题的原因,可能有过多的嵌套布局增加了渲染时间、频繁读写文件或者网络请求增加了 CPU 和 IO 负载、低效的算法或者不合理的数据结构在无谓地耗费资源,等等情况。
可能性太多,看哪个都像是罪魁祸首,怎么破?如果打算把每种猜想都尝试一遍,既无效率,也难以找到真正的问题,更何况不少问题是有多个原因交织在一起造成的。
所以靠盲猜真的解决不了 Android 的性能优化问题,这需要同学们具备深厚的系统知识体系,包括 Linux 内核的运作机制、熟悉 Android 虚拟机核心模块、掌握各种性能分析工具、了解 Android 应用构建过程等。
这看起来要求并不低,但这就是一名 Android 开发者在成长之路上必须要跨越的一道坎。只要读懂《Android 性能优化入门与实战》这本书,就可以拥有一眼看到问题本质的本领。
我们先来了解一下,做好性能优化,要先筑牢哪些基础。
性能优化是一项系统性的工作,需要对多项知识技能进行交叉运用,具体有以下五项。
深入理解 Android 系统框架。需要透彻了解 Application Framework、Android Runtime、Activity Manager 等核心组件,这可以明白应用程序在 Android 上运作的机理。熟悉 Java 和 Kotlin编程语言。这两门是 Android 平台的指定开发语言,需要了解语言的特性、差异,以及编写高效代码的诀窍。掌握内存布局和管理知识。要知道内存分配、垃圾回收机制,以及掌握内存泄漏检测和优化等技术。了解多线程编程和异步处理。需要了解线程池、Handler、AsyncTask 等相关的基本概念,线程安全,检测并解决死锁问题。熟悉性能分析和调试工具。Android Studio 就提供了诸多性能分析工具,包括 Android Profiler、Systrace、Memory Profiler、CPU Profiler 等,还有开源的 LeakCanary 库。开发人员也应具备自研能力,可根据实际情况定制性能分析工具。实话说,Android 性能 bug 并不那么容易解决,而要将以上各个知识点融汇贯通以解决问题。本书作者张世欣(网名:拭心)以多年大厂功力写成此书,一方面是提出性能优化的系统性方法论,另一方面也是为程序员的职业成长提供了真知灼见。
张世欣毕业于西安电子科技大学计算机专业,曾就职于字节跳动基础架构组,目前在喜马拉雅担任 Android 技术专家。在应用性能优化、性能分析工具、跨端技术等方面有丰富的开发实践经验。
他是一位乐于无私分享的技术人,其博客访问量达到百万级别人次,获得谷歌开发者专家、CSDN 博客专家和 InfoQ 签约作者等认证。
现在,让我们开始 Android 性能优化实战吧。
性能优化也是在遵循“发现问题——定位问题——解决问题”的思路。书中将性能优化工作划分为五个步骤,涵盖了从问题定义、数据收集到分析解决的过程。
指标:要找到有意义的指标数据,首先要找出业务流转风险点,然后是系统的技术架构风险点,最后是技术实现风险点。监控:搭建监控系统,实现数据采集、上报数据、数据聚合、可视化展示。分析:通过监控数据找到问题原因,对于简单的线上报警,可以快速处理。对于复杂问题,则要在线下进行复现并分析。优化:编写优化方案文档,充分考虑利弊得失。实验:可以采用 AB 测试的方式进行对比实验,以检验优化方案是否可行。确认有效,则可正式上线部署。在应用开发完成后,需要对其进行充分的性能测试,书中将其分为四个环节的工作:确定核心性能指标、明确测试用例、执行测试动作、输出报告形成结论和判断。
这四个环节中,执行测试动作是最为复杂的,书中给出了多种测试工具和方法的实践说明,包括测试 CPU、GPU、FPS、文件读写等。细致的测试,就能在上线前发现大多数的性能问题,可以有力提高软件的质量。
针对性能优化的疑难问题,本书以最大篇幅的“专项优化”进行了深入透彻的解说,对内存优化、流畅度优化、启动优化给出了分析方法和解决方案。
内存优化
从虚拟内存不足、物理内存不足、GC 对程序运行的影响三方面说明问题产生的原因,然后提出线上内存监控与线下内存测试相结合的方式以探查问题,最后给出 Java、Native、图片内存问题的分析与定位方法。
流畅度优化
UI/UE 流畅度直接影响用户的体验效果,书中提出对 FPS 和掉帧数、主线程卡顿进行线上监控,然后使用 Android Studio Profiler、systrace 进行线下流畅度分析。
在确定问题后,则可以应用三项优化办法:增加绘制相关线程的运行时间、减少主线程非绘制任务耗时、减少绘制任务耗时。
启动优化
先分析了 App 的启动流程,指出可能会影响启动速度的因素,然后提出了线上监控和线下分析的方法。
定位问题后,则可以应用六种解决办法:绑定大核提升启动速度、通过框架管理启动任务、减少 ContentProvider 初始化耗时、减少 .so 文件加载耗时、延迟子进程创建、低端机启动逻辑降级。
同学们学到这里,即掌握了 Android 应用性能优化心法,再遇上任何性能问题,皆可从容应对,找到问题并顺利解决掉。
结语
性能优化本就是一件难度不小的工作,更何况 Android 移动设备品牌众多,硬件配置千差万别。有时候 App 在某个设备上终于调试稳定了,换一个设备就出各种问题,业界非常需要一本能讲明白 Android 平台性能优化的书。
《Android 性能优化入门与实战》就讲透了怎么做优化,这本书的内容非常“干”,先从开发者需要掌握的 Android 系统相关知识说起,说明了初中级、高级、资深级、专家级各自应当具备的技能水平。随后对性能测试技术、三项专项优化技术进行了充分的说明。
对于读者来说,这不仅是一本 Android 性能优化实战指南,也可以用来指导自己的职业成长规划。作者以其多年的实践经验,向读者展示了大厂在性能优化上的系统性做法。
本书最重要的特点,是提出了 Android 系统优化的方法论,只要遵循“指标——监控——分析——优化——实验”的五步骤,就可以稳扎稳打地解决问题,再也不必靠着盲猜去撞大运了。
书中还介绍了诸多实用工具,可以开箱即用。作者针对各类低性能场景进行了细致的剖析,并精心编写了解决方案代码示例,读者稍加改动,就能直接应用在自己的项目中。
精彩代码示例
对一些复杂的技术原理和流程,作者绘制了简明易懂的图示,使得本书具备优良的阅读体验。
精彩图示
本书以其极具价值的内容,得到业界诸多大佬的肯定。
吃透《Android 性能优化入门与实战》,通往性能优化专家之路!
来源:晓加科技论