1.1 为什么要做性能优化

本节首先讲述性能优化的目的以及出现性能瓶颈的常见现象,并给出优化App性能的一般步骤。通过本节的学习,读者可以认识到性能优化的重要性,及时识别在App运行中出现的问题,最后掌握性能优化的一般流程。

1.1.1 性能优化的目的

为什么要做性能优化呢?总的来说,就是要提供好的用户体验,而应用程序运行的性能表现是用户体验中的重要一环。

如前文描述的那样,Android平台的市场占有率已经接近80%。然而,性能问题就像是影子一样,一直困扰着用户。根据2017年发布的《智能手机卡顿报告》中的描述:“数据显示,86.1%的用户手机存在卡顿现象,其中Android用户所面临的卡顿问题比iOS用户更严重。”

另一方面,当今应用市场竞争异常激烈,同类App层出不穷,许多App昙花一现般地出现,然后消亡。这其中一部分原因可能就是由于其自身糟糕的性能表现导致的,试想一下,如果用户想要完成一个同样的操作,一个App需要10秒,而同类App仅需要3秒,作为用户,会怎么选?此外,欠佳的性能还可能导致ANR(Application Not Responding,指应用程序无响应)情况的出现。再加上一旦发生卡顿,就意味着接下来可能发生手机发热、电量快速消耗等关联问题,这些都很可能导致用户的流失。

因此,改善App性能不容忽视。

1.1.2 App出现性能瓶颈的症状

在开始动手前,我们需要确定哪些问题属于性能问题的范畴。下面列举一些实际的问题。当然,性能出现瓶颈时的症状通常比下面所提及的现象更多样化一些。

1.App启动时间过长

例如,App启动时出现卡顿,甚至发生白屏/黑屏。

2.页面跳转耗时过长

例如,某个商城App,从商品列表页面跳转到商品详情页面时,页面跳转有明显的滞后感。

3.动画执行时发生掉帧卡顿现象

例如,使用Fragment+ViewPager的组合构成横滑界面,在滑动时出现动画停顿,或动画不跟手的现象。

4.App运行时设备过热

例如,运行App,执行一些操作,设备就开始升温。当然,这里要排除一些正常的现象,如玩游戏等本身运算量就很大的情况。

5.App运行时耗电过多

例如,在电池使用图表中,某个App毫无理由地使用了过多的电量。

6.随着使用时间的增长,程序运行速度越来越慢

例如,某个即时消息App,随着聊天记录的日益增多,使用起来越来越慢,卡顿现象越来越严重。

如果你的App出现上述症状中的某一个或者某几个,毫无疑问,你需要对它动手术了。

1.1.3 提升App性能的步骤

一般来讲,要完成优化App的运行性能,通常分为三个步骤,分别为静态代码审查、App运行时检查以及APK打包优化。

聪明的读者可能已经发现,本书的结构正是按照这个步骤来组织的。

现在,我们先对这三个步骤进行初步介绍,在后续的章节中会逐个深入地讲解。

静态代码审查可以认为是一种“保险措施”,它通过提高代码质量规避错误的逻辑或内存泄漏等问题,达到提高App运行性能的目的。

App运行时检查通常在App运行起来时进行,通过性能分析工具可以帮我们找到性能瓶颈,甚至在开发者或测试人员自己使用的过程中,也会发现某些肉眼可见的卡顿现象。由于这些问题基本都需要在运行App时才会被发现,因此笔者将其归为“App运行时检查”类的问题。

APK打包优化的目的在于代码保护和瘦身。具体说来,就是代码混淆和优化资源:一方面,通过代码混淆有效地保护代码不会被轻易地反编译并压缩;另一方面,通过清理无用的资源和优化用到的资源,使APK整体瘦身。通常,体积越小的APK比体积更大的APK受欢迎。

实操时,读者可选择某个或某些项目需要做对应的检查,也可按照本书建议的流程按步骤进行。图1.1描述了预防和解决App性能问题的一般步骤。

图1.1 Android App性能优化一般步骤

此外,本书特意增加了架构优选方面的内容,旨在为读者在开发前或重构前提供架构选择上的参考。