什么原因可能会造成Android手机卡顿?

分析:此问题更多的是从宏观角度考核面试者对Android系统了解,“卡顿”是站在用户角度的描述,对于开发人员应从,Android的发展历史、程序的运行机制、程序性能优化等诸多方面进行延伸回答。技术层面应对性能优化做为回答重点,突出专业知识。

目录

前言

碎片化后的系统因素

内存回收机制

硬件性能与软件不匹配

应用优化自身不利,导致的卡顿

运行时所需要的资源存在强烈竞争

总结


前言

Android是基于Linux的开放源代码的操作系统,一般用于移动设备,自2008年第一部Android手机发布以来,到如今已有十多年的发展历程,从最初的测试版本,到最新的Android 10.0,甚至计划在2020年3月份开放的开发版。经历了近20个发行版本后,被用户所吐槽最多的卡顿问题为什么还一直得不到解决呢?我认为有以下原因。

碎片化后的系统因素

所谓碎片化,简单的理解就是:Android整个平台上的差异越来越大。越来越大的原因有以下因素:

  1. Android在市面上的流通版本过多,其官方发行的版本就有20个。
  2. Android设备形态各异,有平板、车载系统、手机、广告机等,设备形态的差异,导致Android必须接受各种各样的适配和定制。
  3. 第三方ROM厂商,深度改造Android,目前各国内手机厂商,基本上都有自己的定制系统,华为的EMUI,小米的MIUI等

Android的开源为系统的普及立下了汗马功劳,但缺点也是很明显的,导致的碎片化问题,造成了Android系统的混乱,也增加了企业的开发维护成本。那这跟卡顿有什么关系呢?关系是有的,在Android高速发展的前期,手机ROM定制厂商非常多,其研发能力、定制目的各有差异,一些水平较弱的厂商,定制后的系统美其名曰为“深度优化系统”,但事实上其性能比不上原生系统,还有些厂商,在原生系统的基础上加了很多后台服务,做诸如用户行为搜集、广告推送等一些定制化需求,导致系统不堪负重。还有些由于优化不当,隐藏漏洞很多,导致严重的系统异常,甚至崩溃问题。不过在当前被华为、小米、VIVO等几家大厂商瓜分完Android市场以后,这种现象好了很多。但不可否认碎片化后,系统定制商的优化水平,是决定Android系统运行流畅度的因素之一

什么原因可能会造成Android手机卡顿?_第1张图片

 

内存回收机制

Android操作系统采用DVM(Dalvik VM),跟JAVA虚拟机类似,来作为承上启下的桥梁,DVM继承了JAVA的GC内存回收机制,而Android中所有的JAVA程序都运行在DVM之上,其内存回收时机和效率,取决于系统的内存回收策略。系统时刻在检测内存动态,并根据系统的GHM(Generational Heap Memory)内存模型,对不同数据类型分别执行不同的GC操作,但在DVM上执行GC是一个串行过程,简单来说就是:当系统执行内存回收(GC)的时候其他程序(进程)都将处于暂停状态,直到回收结束后,其他程序(进程)才得以恢复运行

 

一般情况下的GC并不会导致卡顿,用户感知性不强,但是连续的GC,会导致进程暂停状态时间累积加长,以屏幕刷新率60帧的标准,暂停时间超过16ms,就会导致帧率异常,连续的异常丢帧,就可能会被用户感知了,也就是形成了卡顿。

什么原因可能会造成Android手机卡顿?_第2张图片

硬件性能与软件不匹配

要想得到如丝般顺滑的用户体验,好的硬件是必不可少的;类比于电脑,五年前的普通电脑,想玩当前的3A游戏大作,这基本上行不通。手机也是一样,使用低端性能机器,如内存1G以下跑Android 9以上,或是运行高画质大型游戏,同样也是行不通的。目前市场上的旗舰机,基本上可以通吃应用市场中的所有游戏,但中低端机型,就可能有压力了;取决于手机性能的主要指标有:CPU、内存、GPU、EMMC;在选择Android手机的时候,重点关注这几项,避免出现小马拉大车的情况。

应用优化自身不利,导致的卡顿

好的产品体验是软硬件共同优化的成果,硬件做的再好,配置再高,软件拖后腿,那也会造成卡顿、崩溃等不良体验。本人从事Android领域开发管理多年,以下问题导致卡顿的情况较多:

  1. 不好的大图片资源处理机制,大图片就意味着大内存,也就最容易造成内存泄漏,抖动等问题,小则频繁触发GC,引起卡顿,大则引发OOM,造成应用崩溃。
  2. 内存泄漏,主要体现在静态变量引用了本需要回收的对象,导致该对象不能回收。在长时间运行时,如果有存在内存泄漏,这会导致该应用使用的内存越来越多,一般情况下,持续的内存泄漏最终会导致超出系统规定的最大内存限制,应用崩溃,但在未崩溃前,会导致系统可用内存越来越小,从而可能引发其他应用卡顿
  3. 界面UI线程处理不当,一个应用要运行流畅,需要满足一定的刷新率,也就是在单位时间内给用户展现的画面多少,决定用户感知的流畅程度。如:当界面刷新为1帧每秒时,用户感觉画面是在放PPT一样,当刷新率为60帧每秒时,用户就觉得流畅了。而当工程师在UI线程中处理了过多的耗时操作,导致UI线程来不及处理画面帧的生成、绘制,导致帧率过低,从而用户感知卡顿。
  4. 不好的缓存机制,缓存是为了解决加载速率较低问题的解决方案,选择优秀的缓存机制在一定程度上能优化用户体验。

运行时所需要的资源存在强烈竞争

这点很好理解,如领导分配小王干两件事A和B,但是A的优先级比B的要高得多,小王同一时间片只能干一件事,所以小王就先做A,B就先放着,等A处理完再处理B。同理对于CPU的使用也基本遵循这个原理。从宏观来看,当CPU占用率处于一个较高水平时,这时候再运行新的应用,显然会比CPU处于较低水平时的运行效率要低,也可能造成卡顿。不仅仅是CPU,磁盘IO、内存等也存在类似竞争影响。

总结

关于手机卡顿,有系统方面的原因、硬件方面的原因也有应用层的原因。Android手机的流畅性需要多方面的优化。当然保持良好的手机使用习惯,定期清理、控制后台运行程序数量等操作也有助于提升流畅度。

 

 

 

 

 

 

你可能感兴趣的:(BATJ面试真题分析)