大话 Android Performance

858 阅读6分钟

什么是 Android Performance

Android Performance 也就是我们说的性能,说的直白就是手机在日常使用中,是否用的爽,而这个爽用专业的术语来概括就是以下几个面向:

  • 应用的启动速度
  • 应用使用过程中的流畅度
  • 应用使用中各种场景的响应度

通过以上场景,其实可以看到我们在讨论 Performance 好坏的时候,很多时候其实是一个相对的概念,而非绝对的概念,比如说多快叫快,例如去年启动一个微信,2s 内就算很快了,可是今年,随着硬件软件技术的发展,大于 1s 都是慢的,所以性能是渐变提升,而非是一个一成不变的标准.

什么因素会影响 Performance

这个还是要回到问题本身来看,不过从大的方面其实无外乎两点:

  • 硬件
  • 软件

好吧,这个其实是废话,因为任何问题都可以讲是同硬件和软件相关.

硬件因素

讨论硬件因素还是要回到相关的性能问题来看,在软件因素不变的情况下,其实无外乎就是代码的执行速度谁更快,而和这个直接相关的自然就是 CPU 了,以 Android 手机为例,基本上都是 ARM 架构的CPU,所以简单说在同等架构下就是频率越高的,性能就越好,请注意这个是指的同等架构下,如果是不同架构下,就要看具体 CPU 参数了,详细的可以去参考 ARM 的参数表。 问题回来了,所以真的是只要 CPU 够快性能就会最好吗? 答案显然是否定的,CPU 是其中很重要的一个因素,但不是唯一的,大家有没有发现市面上高配低价的手机,但是实际上手体验并不比某些CPU配置较低的好很多呢? 原因是因为程序在实际run的过程中,不会是一个单纯的线性关系,在现在的程序执行中,都是一个复杂的交互过程,以应用启动为例子,通常程序(CPU)的状态会被分为四个类别:

  1. Running
    • Running 是和代码在CPU实际的处理能力有关系
  2. Runnable
    • CPU因为schedule的策略,被切出去服务于其他进程导致
  3. Sleeping
    • 线程主动让出CPU占用,等待其他线程的执行
  4. Usleeping
    • 因为I/O关系,等待返回

如果在SW和CPU等同的情况下,I/O就变成了另一个因素,而和I/O相关的硬件就是我们所说的memory,这个当中包含了RAM和ROM,当然主要是RAM,往往大家不会太去关注RAM这项,其实大家如果使用电脑,就知道之前使用机械硬盘有多痛苦,而换成用SSD后,才发现是如此的顺畅。 其实大家再看手机参数的时候,往往会被CPU这一项影响,而忽略了Memory的影响,所以还要去看看在memory上面的用料状况。 所以跑分软件其实是比较客观来体现硬件性能的一个指标,比如说安兔兔,基本上还是可以比较客观的来体现硬件的性能,请注意我这边说的是硬件,而非是手机的性能,因为即便是同等硬件下,软件实际上才是各个手机厂家技术高低的体现,毕竟SOC其实也就是2,3家而已。 当然除了上面讲的,其实GPU也是非常重中之重的一个硬件,特别是我们知道在和图像相关的处理上,实际的代码都是跑在GPU上,所以图像部分处理的快慢就取决于GPU的能力

软件因素

相对于硬件,其实软件的可变性才是比较大,这里软件的前提还是指的同一种操作系统,比如我们说的 Android 手机,但是即便是同种操作系统,Android version 如果不同,最后性能的体验都会差别很大。比如说Android早期是用的单个buffer,那么卡顿的现象是非常容易发生且常见,而后期改用了 tripple buffer 的做法,自然这种软件的优化,可以大大提升性能的体验,即使用的同样的硬件。 其实软件上面,除非是重大的架构调整或者算法优化,否则软件性能提升的一个普遍方式就是用空间换取时间,也就是我们说的通过层层cache来优化处理时间。 Android 从10年前到今天,中间其实历经了多次架构的优化,当中也不少的负面优化,而 Android 早期最被大家诟病的就是他们的 JVM。众所周知,android 的应用都是基于java开发的,而java的效率是底下,所以 Google 在 android 早些年也是为此不断做出变化,直到今天ART,另外还有像RenderThread的试用,Vsync的机制等等,其实也都是从软件层面来改善性能。

那除了上述的两个外还有哪些呢?其实针对手机来说,有一个不得不考量的就是power,因为手机的CPU和桌面CPU在设计考量上一个最大的区别就是,手机一定要考虑power,而CPU就是用电大户,换句话说,虽然你买的手机最高频率可能是3.0GHz,但是其实80%的情况下,你的手机都不会跑在这么高的频率下,因为power扛不住,如果一直高频使用,估计半个小时可能就没电了。 所以在谈论性能的时候,不得不去面对的就是 power,我们不可能一直让CPU在最高频率的情况下运行,可是又同时要最大程度上让性能够好,这个当中的balance如何取舍,就是技术能力的体现了,前一阵子,网上经常会报出某某手机 benchmark 作弊,在运行跑分软件的时候,会针对性的把硬件能力放到最大。其实坦白说,这个也不叫作弊,因为跑分软件本身体现的就是硬件的极限能力大小,他并不是 Android 手机体验性能的指标,所以跑分软件高,并不能说明整机的性能高。

之后的文章也会主要集中在软件的上面,对 Android 性能的分析和优化展开讨论,还请大家多多支持!!