Android性能优化入门与实战

978-7-115-63042-1
作者: 张世欣(拭心)
译者:
编辑: 张天怡

图书目录:

详情

随着互联网用户渗透率的提升,中国移动互联网进入了平稳发展阶段。在存量市场下,企业能否提供更优质的用户体验,成为影响其用户规模的重要因素,因此,“丰富的性能优化经验”等描述在高级职位的要求中频繁出现。很多人对性能优化感兴趣,因其不仅有技术挑战,在面试中也经常被提及。然而,对于没有经验的人来说,这个概念比较空泛,既不清楚其具体涵盖内容,也担心自己是否能掌握到足够的深度。如果你有同样的困惑,那么这本书能给你答案。读完本书之后,你会豁然开朗,对性能优化胸有成竹。

图书摘要

版权信息

书名:Android性能优化入门与实战

ISBN:978-7-115-63042-1

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

著    张世欣

责任编辑 张天怡

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内容提要

随着互联网用户渗透率的提升,中国移动互联网进入了平稳发展阶段。在存量市场下,企业能否提供更优质的用户体验,成为影响其用户规模的重要因素,因此,“丰富的性能优化经验”等描述在高级职位的要求中频繁出现。很多人对性能优化感兴趣,因其不仅有技术挑战,在面试中也经常被提及。然而,对于没有经验的人来说,这个概念比较空泛,既不清楚其具体涵盖内容,也担心自己是否能掌握到足够的深度。如果你有同样的困惑,那么这本书能给你答案。读完本书之后,你会豁然开朗,对性能优化胸有成竹。

这是一本针对Android App性能优化的书,首先描述从事性能优化测试相关工作需要具备的能力,然后介绍性能优化和性能测试的组成环节,最后深入地讲解内存、流畅度和启动优化的具体方案。

本书适合想要或正在从事Android开发工作的读者,特别是从事Android性能测试和优化相关工作的读者阅读。

前  言

我的Android开发之路

我从事Android开发工作已经7年有余,这些年我不断地思考,写了数十篇文章和近百篇日记,在这个过程中我对Android开发的认识逐渐深入。我想是时候做一个总结了。

入行至今的一些关键节点

2014—2015年:踏上Android开发之旅

我与Android的邂逅,源自一场意外。大学期间,我加入了西安电子科技大学金山俱乐部,当时俱乐部里有很多技术小组:后端、前端、Android开发、Windows Phone开发等。由于我当时使用的手机搭载了 Windows Phone系统,所以我就选了Windows Phone开发小组。

2014年,iOS、Android、Windows Phone、塞班四强并立,Windows Phone的磁贴式设计我非常喜欢,加上使用该系统的设备操作流畅、分辨率高,一度让我觉得它可能会“统治”手机操作系统市场。

没想到的是,不到2个月,我的手机因为意外进水,无法使用了!当时我非常难过,一方面因为手机坏了需要重买;另一方面因为无法继续做Windows Phone开发让我感到遗憾。对当时的我来说,再换一台Windows Phone手机过于昂贵,我只好换了一台便宜的Android手机,也因此转向学习Android开发。

几年后,手机操作系统市场的发展超出了我的预料。Windows Phone由于缺乏良好的开发生态,支持的App很少,因此用户也少。用户少导致开发者更少,形成恶性循环。如今Windows Phone 的全球市场份额已经低于10%。

当时我还做了一个目前看来非常重要的决定:我开始写博客,记录自己的所学所得。

在开发项目时,我经常去网上搜索解决方案,后来搜索次数多了,觉得不能一直都是索取,我也要尝试去分享。于是我在CSDN注册了账号,并于2014年10月发布了我的第一篇原创文章。

后来在工作、学习中学到新知识时,我都会尽可能地把它转换成别人看得懂的内容,写到博客里。这个不起眼的开始,让我逐渐有了解决问题后及时沉淀、分享的习惯,令我受益匪浅。

2015—2017年:明白项目迭代的全流程

在学习Android开发时,我先看了明日科技编写的《Android从入门到精通》,然后看了校内网的一些视频,逐渐可以开发一些简单的App。Android开发“所见即所得”的特点,让我很快就可以得到反馈。后来我又去参加了一些地方性的Android开发比赛,获得了名次,让我逐渐增强了从事Android开发工作的信心。

2015年,我偶然参加了一家公司的招聘会,在面试时,面试官问了我一些简单的与Java、Android和算法有关的问题。其中令我印象最深的就是问我会不会使用四大组件和ListView。

到公司实习后,我感触很多:之前我都是自己拍脑袋写一些简单的功能代码,没有参照开发规范,也没有进行工程结构设计、系统设计,更没有考虑性能是否有问题。真正参与商业项目开发后,我发现了自己的不足。

因此在完成工作的同时,我观察并记录了项目迭代的各个流程,对自己的知识结构查漏补缺,创作了有关Java 源代码分析、Android开发进阶、设计模式的文章。我逐渐养成了定期复盘的习惯,每当回顾过去时,我都会想想自己的成长历程。

2017—2020年:提升复杂项目的架构能力和做事意识

在开发第一个项目时,我基本掌握了从0到1开发一个Android App的流程,但对Android项目架构的认识还只停留在表面,没有足够多的实践。

2017年,我开始接触喜马拉雅直播项目,喜马拉雅在当时已经有多年的技术积累,加上直播业务比较复杂,开发团队在架构设计、编译加速、快速迭代等方面都做了比较多的工作,让我大开眼界。

为了能够提升自己的技术,在这期间我学习了很多框架的源代码,通过分析这些框架的优缺点、核心机制、架构层级、设计模式,我对如何开发一个框架有了基本的认识,也创作了一些文章,比如“Android 进阶之路:深入理解常用框架实现原理”。

有了这些积累,再去实现复杂业务需求、基础框架抽取、内部SDK(Software Development Kit,软件开发工具包)和性能优化,就容易多了。

在实现一些需求或者遇到复杂的问题时,我会先想想之前看的第三方框架或者系统源代码里有没有类似的情况,它们是怎么处理的。

除了技术上的提升,在这几年里,我的项目全局思考能力也提升很多。

由于我的沟通能力较强,领导让我担任一个10人小组的组长,负责跟进项目的需求提出、开发、测试、上线、运营等各个环节,保证项目及时交付并快速迭代。

一开始我有一些不习惯,因为写代码时总是被打断,比如被产品需求评审、测试 bug 反馈、运营反馈线上数据有问题等事情打断,也经常刚想清楚代码怎么写,正准备动手,就被叫去开会,回来后只能重新寻找思路。

后来在和领导沟通、看一些书和文章后,我逐渐对写代码和做事情有了不同的认识。代码只是中间产物,最终我们还是要设计出对用户有价值的产品,要做到这个,除了关注代码,还需要关注其他很多方面。

2020年至今:深入理解底层技术

在进入字节跳动做基础技术开发后,我的技术视野再一次得以拓宽。

字节跳动有多款亿级用户的产品,其中复杂的业务常常会产生各种令人意想不到的问题,这些问题需要技术人员深入理解底层技术,对Android系统的整个架构都比较熟悉,才能够解决。

问题驱动是非常好的学习方式。每次帮助业务方解决一个新问题,我的知识库都会丰富一些,这让我非常兴奋。之前我不知道学来干什么的Linux编程、Android虚拟机,后来终于在实际问题中弄清楚了它们的使用场景,继续深入学习的效率也高了很多。

对软件开发的认识

前面讲了个人的一些经历,接下来讲我从这些经历中沉淀出的有价值的结论,主要包括对下面两点的认识。

职业发展的不同阶段。

技术的价值。

职业发展的不同阶段

我们在工作时,要对自己做的事有清晰的认识,包括它大概属于哪一个阶段,怎样可以做得更好。结合我这些年的工作内容和业内“大佬”所做的事情,我把软件开发者的职业发展分为以下几个阶段。

第一个阶段就是使用某个技术方向的一个点完成业务需求。比如Android开发者可以使用Android SDK自定义布局,完成产品要求的界面功能。这个阶段的工作内容比较简单,开发者只要能仔细学习官方文档或者看一些书就可胜任。

第二个阶段开发者做的项目更加复杂,会涉及某个技术方向的多个点,这时开发者需要把这些点连起来,提供一个更加体系化的解决方案。

比如Android开发者在自定义布局时,发现页面卡顿,要解决这个问题,开发者就要去了解这个自定义View的哪些代码影响了这个页面的刷新速度。这时开发者需要去研究渲染的基本原理,开发分析卡顿的工具,找到卡顿的原因,进行优化。在这个过程中,开发者会对流畅性有整体的认识,能够对相关问题有比较全面的分析思路、解决手段,从而可以开发相关的分析工具或优化库。如果能做到这一点,开发者基本上就是一名高级工程师了,不仅能做一个模块,还能够负责一个具体细分方向的工作。

第三个阶段是掌握某个技术方向的通用知识,有多个线的实践,能够连线为面,同时给工作做中长期的技术规划。

拿Android开发者来说,刚才提到通过解决卡顿问题,在流畅性方面开发者会有比较多的实践;如果又发现内存有问题,开发者会去了解内存分配、回收原理,开发出内存分析优化工具,这样就有了内存的体系化的实践;再积累一些针对启动速度、包大小等的优化经验。把这些线连起来,就得到了一个性能监控平台,这就是把多条线连成一个面。

再往前发展就不是只做技术,而是要更多地思考业务。技术最终都是为业务服务的。职业发展的第四个阶段,就是不局限于某个技术方向,能够从产品的业务规划、业务指标出发,为产品提供技术支持。

你首先要明白公司业务的核心指标是什么,比如一个短视频App,它的核心指标除了常规的日活跃用户数(以下简称日活)、用户量,还包括视频的播放率、用户的停留时长、页面渗透率等。了解这些指标以后,你要思考做什么可以有助于公司提升这些指标,结合业务的核心指标反思当前的项目中哪里存在优化空间。

总结我对职业发展的不同阶段的认识:第一个阶段只做一些具体的点;第二个阶段做多个点,需要能够连点成线;第三个阶段需要围绕这些线提炼出通用的知识,再做到对业务/技术项目有整体的认识;第四个阶段能够从业务规划、业务指标出发,为产品提供技术支持。

技术的价值

说完职业发展的不同阶段,接下来聊技术的价值。技术是为业务服务的。业务处于不同阶段时,技术的价值也有所不同。

◆业务从0到1时

我刚毕业时所在的公司业务处于确定模式阶段,业务上反复试错,项目常常推倒重来,在这个阶段我们做什么能让公司业务变得更好呢?

第一,尽可能地抽取出相似点,减少重复成本。

如果产品经理每次都对你提出相似的需求,你可以考虑如何把这些相似的需求抽象成一些可以复用的逻辑,做一个基本的框架,然后在下次开发的时候能够直接复用框架,而不是每次都从头开始开发。我平时工作中也常常问自己:“我现在做的事哪些是重复的,哪些是可以下沉的?”

第二,提供便捷的数据反馈机制。

在产品经理提需求时,我们可以问问他这个需求出于什么考虑,有没有数据支撑。比如说产品需求是将某个按钮换一个位置,那我们要清楚原因,在换完之后会使页面打开率提升吗?这种数据驱动的理念对个人和公司业务都大有裨益。

在业务从0到1这个阶段,技术对业务的价值是帮助业务快速确定模式。那在业务从1到100这个阶段技术的价值是什么呢?

◆业务从 1 到 100 时

业务正在快速扩大规模时,需要把当前跑通的业务模式复制到更多的地方,同时能够服务更多的用户。在这个阶段中,技术能够提供的价值主要有以下两点。

第一,快速迭代。

虽然快速迭代是在业务的各个阶段都需要做到的,但和业务从 0 到 1 相比,业务从 1 到 100 的阶段会有更多的挑战,除了个人速度要快,更要关注团队的速度。具体到Android项目,几十甚至上百人共同开发的项目和三两个人开发的项目相比,其复杂度可能会高几百倍。

团队人数增多后可能会出现以下几个问题。

多人协作编写的代码有冲突。

发布速度慢。

问题的影响大,不好定位。

针对这些问题,这个阶段我们可以做如下操作。

下沉基础组件,定义组件规范,收敛核心流程。

拆分业务模块,设计业务模板,单独维护迭代。

探索适合业务的新方式。

第二,提升质量。

和日活为几万的产品相比,日活上千万甚至上亿的产品,质量问题更加显著。在开发时,我们不仅要实现功能,还要能够写好功能,更要能够了解底层原理,才能应对这样大的业务量。为了避免经常在重复的问题上浪费时间,我们需要学会从问题中找到共通点,提炼出可以用于多处的解决思路,输出工具、解决方案甚至平台。

这就需要我们有意识地在问题中磨炼本领,主动站在更高的层面思考自己应该具备的能力。在解决问题的时候,除了解决当下的这个问题,更需要做的是把这个问题解构、归类,抽象出不同问题的相似点和差异,得出问题分析流程图。

结束语

有人总结了人生的多重境界:看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水。

我想,我对软件开发的认识还没有达到第三层,但,怕什么真理无穷,进一寸有一寸的欢喜!

第1篇 市场需要什么样的Android开发者

一个人想改变自己的命运,既要靠自我奋斗,也要考虑历史的进程。

在移动互联网增长逐步趋缓、“明星”产品掌握头部流量的今天,市场对移动端开发者的需求,从初期的旺盛、狂热,逐步“降温”至理性,对开发者的要求也在不断地变化着。

Android开发者早期在面试中经常被问到的是API(Application Program Interface,应用程序接口)和框架的使用问题;如今被考察得更为深入和全面,比如框架原理、性能优化、虚拟机、内核、前端和跨平台等。这些知识和相关技能一般需要开发者在项目实践中反复试错,才能熟练掌握。

如今市场对Android开发者的要求与大多数从业者的认知不一致。一方面是公司招人难,花重金也迟迟招不到核心岗位的合适人选;另一方面是开发者找工作难,技术能力达不到要求,面试很久却收不到令自己满意的录用通知。

本书的主要目的之一就是打破信息屏障,让更多人知道成为高级技术人才需要具备的能力,在学习过程中能够有的放矢,精准学习有长期收益的技术点,成为市场中的稀缺者。

在第1篇中,我们将从市场需求出发,探讨Android开发者需要具备的能力和能够走得更高、更远的优秀素质。

第1章 Android开发者需要具备的能力

刚毕业时,我们的自我价值认同感不强,不清楚自己究竟属于什么水平,总是希望通过外界的认可来确认自己的价值,常常会格外看重职级和头衔。

殊不知,不同规模的公司,其职级体系、职级评判标准并不相同。同样工作一两年,在创业公司可能是“高级工程师”,在大公司可能就是“普通工程师”。两家公司考察的能力不同,所以没办法相提并论。

关于技能的掌握程度,有一个相对通用的评测模型,即德雷福斯(Dreyfus,又译为德赖弗斯)模型,如图1-1所示。

图1-1 德雷福斯模型

德雷福斯模型根据人们对技能的掌握程度,自底向上将人们分成5个不同的等级:新手、高级新手、胜任者、精通者、专家。

新手、高级新手的知识和经验较少,需要经过一定的指导才能完成工作,无法处理比较复杂的工作,看待问题的角度也比较片面。

胜任者拥有比较完整的领域背景知识,能够独立完成大部分工作,但面对复杂的问题时还是缺乏有效的解决思路和手段。

精通者不仅有丰富的领域知识,还能发现复杂问题背后的通用规律,能够从全局思考并解决复杂问题,且能对项目的中长期发展有一定规划。

专家对领域内的知识有极致的了解,同时能够结合其他领域的特点,提出创新的方向,在处理复杂问题时,能够抓住核心并从更高层次思考和解决问题。

本章我们将参考德雷福斯模型,给出不同等级的Android开发者需要具备的能力,并给出相应的学习建议,希望可以帮助你界定自己的水平,找到学习方向。

1.1 初中级开发者需要具备的能力

初中级开发者一般指从事Android开发不久(1~3 年)的新人。他们对Android开发有一些了解,实现过一些简单的需求,但遇到问题时不知道如何处理,缺乏全面的认识和解决问题的思路、方法。

初中级开发者的判断标准如下。

能够在同事的协助下,完成常见的业务需求。

执行力强,能够及时完成安排的工作。

初中级开发者需要具备如下技术能力。

有比较好的操作系统、数据库、网络、数据结构和算法等方面的基础。

熟悉Java/Kotlin的基本使用,了解集合、并发、泛型、反射等的使用。

了解Android开发基础知识,包括四大组件、Jetpack等。

熟悉Android布局绘制流程,具备自定义View的能力。

了解Android App构建过程,能够编写简单的Gradle脚本。

了解常用的第三方框架,能够使用框架比较快地实现需求。

初中级阶段的Android开发者一般是团队里的助手角色,帮助高级开发者实现需求,需要掌握的主要是软件开发基础和Android SDK的基本使用方法。

一般公司在招聘初中级开发者时,由于其Android开发经验不够丰富,所以会更侧重于考察其计算机基础、程序设计语言基础、Android基础,比如数据结构算法、网络协议、Java集合框架、并发、Android 四大组件细节等。因此,如果你是想要从事Android开发工作的读者,或者是刚刚工作不久的新手,可以对本节提及的知识点进行深入学习。

1.2 高级开发者需要具备的能力

高级开发者一般指能够独当一面的开发者。他应对日常需求在Android平台上的实现方式均有所了解,能够对一些复杂的需求进行合理的设计和拆解,同时能够兼顾扩展性和性能。此外,这也要求其在项目协作方面有比较强的能力,可以积极组织协调各个职能部门的同事,推进项目落地。高级开发者一般需要3~5年工作经验。

高级开发者的判断标准如下。

有比较多的项目实践经验。

能够独立处理比较复杂的项目需求,合理地将其拆解并实现。

实现需求的同时注重效率和项目架构。

能够指导团队内的实习生和初中级开发者。

能够成为项目某个模块的负责人,评估相关业务需求的合理性和迭代规划。

高级开发者需要具备如下技术能力。

掌握Android Framework的常见原理和具体工作,比如事件循环机制、Activity/Fragment启动流程、生命周期、布局的绘制流程、事件分发等。

掌握Jetpack常用组件的实现原理和适用场景。

熟悉跨进程通信的基本使用,了解多进程的使用场景。

掌握常用的设计模式,了解常见的架构模式的优缺点。

熟悉常用的第三方框架的原理和设计思想,能够根据场景选择合适的框架。

熟悉Android App构建过程,了解常用的字节码处理三方库,能够实现通用的编译时修改插件。

了解常用的性能优化工具,有性能优化意识。

高级阶段的Android开发者一般是团队里的核心成员,需要具备丰富的实战经验, 除了会用Android的相关技术,还要明白不同技术的优缺点和使用场景。另外由于其有独立负责的模块,在开发任务繁重的时候,可能会有初中级开发者一起协作,那高级开发者就需要承担起指导的责任,合理地拆解和分配需求,带领伙伴既快又好地实现项目需求。

一般公司在招聘高级开发者时,更偏向于有复杂项目工作经验的人,“复杂”的判断标准如下。

业务复杂,涉及技术多,比如音视频、Hybrid(混合模式)相关。

日活高,比如百万、千万甚至更高。

开发时间长,团队成员多。

面试时除了项目复杂度,个人在其中承担的角色也应非常重要。比如有独立负责某个复杂模块或者开发底层组件经验的人,一定比只处理开发列表页等简单业务的人有优势。

一般公司在招聘高级开发者时,会通过一个业务需求使用的技术,引出实现细节、底层原理进行考察,比如从网络框架一路问到三次握手。所以如果你是初中级Android开发者并想要晋升,或者是高级开发者并想要变得更强,可以从这些方面深入学习,做到对项目里使用到的技术,深入理解其原理和设计思想,同时能将其和计算机基础结合起来。

1.3 资深开发者需要具备的能力

资深开发者一般指能够带领团队的开发者。他本身的技术应过硬,同时对项目和产品有比较深入的认识,能够通过自己的技术、业务见解,影响团队的工作方向。资深开发者一般需要 5 年以上的工作经验。

资深开发者的判断标准如下。

能够结合 Android 设备的特性,为业务/技术需求提供置信度高的建议。

作为项目负责人,可以根据业务类型做技术选型,能够做出中长期技术规划。

在团队内有比较大的影响力,团队建设能力强,能够带领初中高级开发者。

作为技术难题攻坚的头部力量,能够解决复杂问题。

资深开发者需要具备如下技术能力。

了解Android NDK(Native Development Kit,原生开发工具套件)开发,包括但不限于C/C++、JNI(Java Native Interface,Java本地接口)等。

对Android Runtime有基本的认识,能够根据问题快速了解具体技术细节。

掌握Android项目架构的常用技术及核心原理,包括但不限于组件化、插件化、热修复等。

熟悉Android启动、内存、卡顿、功耗、包大小等的优化方法和工具。

熟悉Android App构建过程,能够对编译速度进行优化。

熟悉业务类型所需的领域技术,比如音视频技术、跨平台技术、图像处理技术等。

资深阶段的Android开发者一般是团队的领导者,需要在技术实力、决策思维、沟通协作方面做出表率。这就要求资深开发者在完成业务需求的同时,还需要多花时间思考项目的技术选型和架构是否能够满足业务迭代需求,从而在合适的时机进行项目优化甚至重构;同时经常在团队、部门内做技术分享,提升自己的影响力,这样资深开发者做的决策才会使大家信服。若资深开发者的技术能力或者视野广度不够,则可能在技术选型和推动项目落地时遇到不少困难。

一般公司在招聘资深开发者时,技术方面的考察内容会涉及Android App开发整个流程的知识点,包括但不限于项目架构、开发框架、编译优化、迭代速度、质量优化等方面的知识点,当然也不要求每个都精通,只要一专多能即可。另外,公司也会考察面试者在项目拆解、技术选型方面的能力,比如给一个较为复杂的需求,让其给出架构设计和核心模块的伪代码实现。

如果你是高级开发者并想要晋升,或者是资深开发者并想要变得更强,可以对本节提及的知识点进行深入学习,然后从 App 负责人的角度思考项目整体架构的合理性和优化点。

1.4 性能技术专家需要具备的能力

资深开发者再进一步发展,主要有两个方向,即技术经理和技术专家,分别对应业务方向和技术方向。

技术经理需要有技术广度,除了Android技术过硬,对其他技术也要有所了解,同时商业思维和项目管理能力等也要很强,最重要的是具备团队建设能力,负责的团队能够以较高的速度、质量和满意度落实规划;技术专家需要有技术深度,对Android的某个领域有非常深入的理解,可以牵头完成复杂技术攻关,可以从领域的视角出发为产品提供发展建议。

在规模较大的企业内,技术专家一般分多个方向,常见的有音视频、跨平台、图像处理、性能优化、DevOps、端智能等。每个方向涉及的知识点都非常多,因为它们是与平台无关的通用技术,无论是Android、iOS,还是前端、后端,这些方向都会涉及到,所以开发者可以将其作为个人技术特长深入学习。

限于篇幅和笔者的个人经验,本书主要介绍的是Android性能技术专家需要掌握的相关知识,本节先介绍性能技术专家需要具备的能力。

性能技术专家一般指在性能优化相关领域有深入实践的开发者。除了业务手段,性能技术专家更要能从系统底层出发,根据系统运行机制,提出针对业务的优化思路和方法。

性能技术专家的判断标准如下。

具备独到的技术深度,在部门内技术影响力强。

能够发现产品存在的体验问题,提出系统的优化方案并取得收益。

能够根据技术领域的发展趋势,为产品提供优化方向。

不限于技术方向,可以从多维技术角度思考,为业务提供技术价值。

对团队的整体技术提升负责,在技术分享、技术规范、代码审查等方面有比较多的经验。

性能技术专家需要具备如下技术能力。

熟悉Android NDK开发,掌握常用的NDK的使用场景。

掌握Linux系统编程,能够从Linux系统角度思考优化方案。

熟悉Android虚拟机核心模块,能够根据问题快速了解具体技术细节。

熟悉Android启动、内存、卡顿、功耗、包大小等的底层原理,具备相关优化能力。

掌握Android ANR(Application Not Responding,应用无响应)、OOM(Out Of Memory,内存不足)、崩溃等稳定性问题的解决思路、方法和工具。

熟悉Android App构建过程,能够对编译速度进行优化。

性能技术专家一般是公司中性能方向的“权威”,能够结合Android系统的运行机制,为产品提供性能诊断、优化建议和分析工具。要达到这个阶段,开发者需要有全面的知识体系,同时在实践中通过解决大量的问题,沉淀分析经验和理论,从而对Android系统架构从下到上有深入的理解。

一般公司在招聘这个阶段的开发者时,在技术方面会考察得比较深入,可能会从Linux进程管理、内存管理、CPU(Central Processing Unit,中央处理器)调度,一路问到Android虚拟机的AOT(Ahead Of Time,预编译)、类加载、代码执行,然后问到上层的界面渲染、内存申请等细节。当然,不会要求面试者对所有细节都非常熟悉,只要能打通某个线,具备相关基础知识即可,这样再学习其他知识也很容易。

本书的主要目的,就是为读者提供成为Android性能技术专家的学习指引,解决普通App开发者不了解、不知道Linux和Android虚拟机的使用场景的问题。无论你现在做什么业务,性能优化都可以派上用场,相信读完本书,你可以对性能优化和成为性能技术专家有更深刻的认识。

1.5 小结

本章从判断标准、技术能力和面试考察点3个角度出发,介绍了不同阶段的Android开发者需要具备的能力,并给出成长相关的建议。

笔者从业至今,先后看过近百份简历,模拟面试、真实面试数十次,发现很多App开发者的技术都停留在业务层,对Android虚拟机和Linux缺乏基本的了解,在做性能优化时没有有效的手段,晋升/面试时没有亮点;与之相反,不少系统开发者在底层方面的知识和经验比较多,但对上层的业务和框架不熟悉,导致做业务时没办法完全发挥自己的优势。

性能优化作为一个贯通上层业务和底层原理的领域,适合想对Android有全面认识的开发者深入学习。重要的是,学习这部分知识,既容易在工作中产生价值,还具备可迁移性。

容易产生价值,是因为性能优化是通用需求,任何业务(电商、直播、游戏等)发展到一定阶段,都可以在用户体验优化上获取收益;而可迁移性得益于UNIX系统和虚拟机的广泛使用,即使开发者更换其他平台,大部分知识也可以复用。

思考题

根据本章提供的评测模型,你是否能够判断出自己目前属于什么级别?对于达到下一级别需要具备的能力,你是否已经清楚?

相关图书

深入浅出全链路压测
深入浅出全链路压测

相关文章

相关课程