【前言】答得不是很全面,也没法一次性太详细地展开,想到哪写到哪,不然写成论文就累死了...想到别的点再更新吧...
【原因分析】
Q:
不是说用个一会会有点卡顿,而是一个 Android 手机,用个半年后就怎么刷机都不会跟最开始一样流畅了。
A:目前想到的可能原因有:
1,手机存储芯片随着使用自然变慢
有些手机存储芯片是 TLC,可能有提供一个特性,在内部存储区域的dirty区域小于 1/3之前呈现 SLC 特性,随着各种使用,最后 dirty 区域会大于 1/3,然后退化为 TLC。TLC 慢,SLC快。这个特性是 EMMC 厂商加速出厂时的刷机速度引入。
需要说明的是,可能并不是所有TLC都有这个特性,另外,对于大size的emmc,这个性能下降并不明显,低端一些的,比如8G的速度可能掉到几M写速度,16G的到十多M顺序写,32G和64G的会好一些,是变慢但可能影响不大,大部分场合都感觉不出来。
2,硬件老化和各种跌落导致零件损坏
如果有部分器件损坏,可能会导致相应的驱动以及上层服务工作异常,负载很高,从而导致其他正常任务无法获得足够的处理器资源而变慢。
3,各种器件,触点老化导致手机能耗增加,容易发热以后会触发系统温控,从而引起cpu降频导致系统变慢
4,各种新的大版本升级固件相比第一版固件,往往没有相当的研发和测试投入,可能会导致新固件反而没有老固件优化到位,所以感觉卡顿。没有优化到位,也可能有供应商的原因,比如说GPU的闭源库更新可能无法跟上Android新的显示架构更新。当然,不排除新版本因为Android新版本引入了新技术(比如ART)以及其他方面的优化技术积累而做得更好。
5,落下一个很重要的原因,那就是随着硬件的更新换代,Android也不停地迭代,并且几乎每一个版本都耗费更多的资源(更多的是内存与flash),所以就同样的硬件配置,老版本Android可能顺畅得很,而新版本已经跑不动了。随着 Android 新功能的不断增加,对内存的消耗已经是无法刹车了,早期 512M 的如果不做特殊的定制和裁剪,可能完全跑不动了,1G的甚至都必须配 ZRAM swap(时间换空间)。但是,也需要看到Google其他方面的努力,比如说ART,比如说下一代Android M即将推出的Doze和App Standby。
--------
如果是针对同一个固件,原因则:
1,主要是各类软件开启后导致后台软件运行得越来越多,各类默认负载不断加大,空闲处理器资源减少
2,随着后台应用的叠加,内存耗费也会逐步增加,导致最后空闲内存下降,新的任务启动甚至老的任务回到前台需要内存资源时可能需要触发zram swap或者lowmemkiller,这些都会不可避免的带来延迟,而一旦有持续的内存泄露,甚至无法回收内存而会导致系统最后崩溃
3,还有一个特别典型的原因就是,当后台驻留应用泛滥后,随着内存耗费的增加,内存的碎片化会很严重,也就是物理连续的内存会越来越少,这会引起严重的IO性能衰退,可能会导致IO从顺序操作转变为随机操作。
4,类似地,随着应用增多,系统更容易发热,更容易触发系统温控,从而引起降频等动作,各类资源供给降低自然会引起体验下降
5,除此之外,部分温控技术引入了降FPS,这个是明显影响用户体验感知的,当然这也无可厚非,平衡发热和性能一直是硬件固化之后的必由之路
【解决办法】
一,对用户
1,一键清理后台
2,自启动管理,只允许部分自启动
3,后台管理,只允许部分后台
3,重启
4,换新机(建议选购时用16G+,8G的话确认下是不是MLC,更多选购考虑的因素很多,没法一一列出,后面有机会从技术的角度写个新机选购指南。)
注:第2,3个有的系统自带(包括最新版的MIUI,Flyme等都有自带了),有的要安装第三方app,比如绿色守护,下一代Android M有Doze+App Standby,具体效果如何,让我们拭目以待吧。
二,对手机厂商
研发方面做好各类预研,选型,设计,开发,测试和优化,例如:
1,限制后台任务个数
2,解决系统和内核内存泄露
3,错误注入与容错
4,更均衡的cpu/gpu/mem/emmc等
5,做好结构散热
6,优化系统能耗
7,智能清理后台+白名单
8,优化应用
9,资源配额
10,防止信号干扰
11,自启动管理+白名单 ……
其中,Android本身在好几个方面还有极大地改善空间,比如说IO资源配额和信息Push,这些都是客制化厂商和Google需要努力的空间,甚至需要厂商之前协同制定统一的标准。
部分性能问题跟功耗关联,有兴趣可以看我早期写的“长篇大论”,
魅族 MX3 Flyme 3.0 省电技术详解 ,当然,里头的东西也不是很全面,后续有空再展开。
三,对应用开发厂商
很多应用做得很流氓,包括很多大厂,想尽办法让自己驻留在后台,还没有节制的活动;而另外一部分可能受限于技术积累和架构能力,开发出来的应用对各类系统资源的需求很大。前段时间Google放出了好多性能优化相关的视频,这个是很好的信号吧,不过整个行业的应用质量要逐步提高起来,还是需要一个过程,先期望那些大厂能做一些实质的努力。
当然,供应商们的驱动,HAL以及上层APP也会有很多优化的空间。
【结尾】
Android 在不断地迭代,包括客制化厂商和Google 都在不断努力完善,所以长远来看,体验应该是不断优化的...
对于用户来说,学习一些选购知识和一些基本的用法就好了,实在不行就换个口碑更好的机子或者自己到体验店或者借其他同学的手机感受下,然后稍微学习一些简单的用法就好。好的系统的交互设计往往会降低用户的学习成本。
对于身在客制化厂商或者应用开发的各类Engineer,学习一些优化知识,研究各种改善体验的技术,研究竞品,相互学习,与公司内部各个部门协同,致力于改善用户体验应该是我们持久的使命。
除了性能,稳定性,功耗,温控和安全等几个,事关用户的核心体验,都需要整个行业一起努力,持续的优化。
用户不是傻子,最后都得拿产品说话。