当人们在讨论安卓手机掉帧、卡顿、续航变短的时候,常常会接着讨论手机性能不足、电池太小等等硬件相关问题,对手机稍有了解的可能还会说安卓系统的优化不足……但你有没有想过,这一切的根源,极有可能是你每天都要使用的 APP。
在这里,我将会展示几组截图,用直观的数据来说明 APP 对手机的影响究竟有多大。
先展示一下本文的主角,一台 MSM8260 @2.05Ghz 的双核手机,运行基于 AOSP(Android Open Source Project)原生安卓 6.0.1。平日里这台手机的画风是这样的。
【实验组】
这台手机虽然年代久远,但性能却足以流畅运行安卓 6.0 系统,仍然能满足当下对于一台安卓手机的所有需求。下面我将在这台手机上安装 16 个国内最常用的 APP,并对手机在安装前后的流畅度、电力消耗、唤醒、性能消耗进行对比。实验用 APP 名单如下:爱奇艺、百度贴吧、百度地图、滴滴出行、美团、去哪儿旅行、QQ、QQ音乐、手机京东、手机淘宝、腾讯新闻、UC浏览器、微博、微信、支付宝、百度手机助手。
以下是对比图:
注1(你可以在“手机设置>开发人员选项>(监控 )GPU 呈现模式分析”中选择在“屏幕上显示为条形图”来开启这个界面)。
注2(你可以在“手机设置>电池中”点按耗电图来开启这个界面)。
注3(安装“Wakelock Detector”,选择“唤醒触发器”可以开启这个界面)。
注4(安装“3C Toolbox”,启用桌面小部件可以开启这个界面)
关于各个对比图的详细说明:
注1:关于如何读懂“玄学曲线”请参考这篇文章「玄学曲线并不玄 教你如何看懂 GPU 呈现」。可以看出,在安装前绝大多数时间条形图都低于水平基准线,仅仅只是在性能监控小部件内容更新时会有红色和黄色超出去一些,能代表流畅性的蓝色基本处于基准上下;而安装后蓝色柱形图大量超出基准,有的甚至达到了屏幕顶端。在所有APP通过百度手机助手安装完成以后我甚至没有运行其中的任何一个,这对手机性能的影响堪称立竿见影。
注2:这台手机已经有了将近五年的寿命,电池容量早已大幅度下降,经过大约 10 小时的待机后耗电 10%,预计剩余待机时间仍有三天;而安装了国内常用APP后,我在关机状态下充满电开机,并放置不管,大约两个小时的待机消耗掉了 62% 的电力,至于原因大家注意一下“唤醒”一栏便一清二楚——原本只有一点点的唤醒变得和 WiFi 一样长,从开机的时候起就从没停止过。全程两小时的待机过程中手机一直处于温热状态,如果你的手机常常在待机状态下发热,那么这就是原因了,你安装的手机APP们在肆无忌惮消耗你的电力,还是在你不曾使用手机的情况下。一般来说唤醒的长度应该和屏幕开启差不多,或是略长一些。
至于为什么安装后的图像有断层?因为 16 个 APP 的相互唤醒已经耗尽了手机的所有性能,从按下电源键到屏幕亮起长达半分钟,即使屏幕亮起也是各种系统组件停止运行没有响应,手机完全无法操作,不得已只好强制重启后趁着毒瘤自启完成前截图。
注3:没有什么好说的,趁着刚开机的时候截图的,所以次数都不多,但顶部高达 93% 的统计唤醒时间已经很说明问题了。自从安装这些 APP 以后,每次开机一段时间所有毒瘤都完成了自启,手机立刻卡到无法操作。
注4:安装前是长时间待机后立刻截取的屏幕,CPU 负载是0%,CPU 温度和室温相同,内存占用和剩余都是 430MB+,手机处于空载状态;安装后是我强制重启卡死的手机并趁着毒瘤自启完成前截取的图片,可见 CPU 负载高达67%,待机温度大约 50°C,剩余内存仅有 272MB,手机一直在处理各个毒瘤的相互唤醒。
总结:
没有比基于 AOSP 的 ROM 更能代表安卓最核心体验的了,在这样的系统下,不加任何优化地安装全中国装机量最大的几款APP后,手机性能遭到了毁灭性的打击。我是安卓用户,我热爱安卓的开放和高度自订,但我仍然尽可能地推荐别人买 iPhone,因为我知道选择安卓意味着什么,以及选择自由以后那些必然要付出的代价。
【对照组】
但我们仍然拥有最后一丝疑问,究竟是安卓系统导致了这些问题,还是安装的应用导致了这些情况?这一次,我选取了另外 16 款 APP,不同于上次的是本次实验用 APP 全部来自外国的开发团队,根据 Google Play 的下载总排行,其中大多是欧美地区保有量相当巨大的 APP。测试机型依旧是那台配置老掉牙的古董安卓手机。
那么国内 VS 国外,两种不同文化背景下的 APP,究竟对手机有怎样不同的影响呢?到底是不是安卓系统的设计问题呢?
实验用 APP 名单(通过 Google Play 下载):亚马逊购物、Snapchat、Twitter、PayPal、eBay、Netflix、Facebook、YouTube、Uber、Tumblr、Spotify、Pinterest、Messenger、Skype、WhatApp、Instagram。
以下是对比图:
注1(你可以在“手机设置>开发人员选项>(监控) GPU 呈现模式分析”中选择在“屏幕上显示为条形图”来开启这个界面)。
注2(你可以在“手机设置>电池中”点按耗电图来开启这个界面)。
注3(安装“Wakelock Detector”,选择“唤醒触发器”可以开启这个界面)。
注4(安装“3C Toolbox”,启用桌面小部件可以开启这个界面)
关于各个对比图的详细说明:
注1:同样是安装完成后不运行其中任何一个应用,流畅度在安装前后基本一致,柱状图表示略卡一些(毕竟要多绘制一个屏幕和 16 个图标),但是我没有感受到明显卡顿,和国内 APP 的情况完全是天差地别。
注2:安装前我待机了 6 个小时,耗电 6%,和上一次的安装前结果基本一致;安装后我待机了 11 个小时,电池由 91% 下降到了 83%,耗电 8%,预计待机时间少了一天……请关注唤醒一栏,并和国内 APP 的情况做对比。
注3:安装前和安装后的统计时长差别巨大,但唤醒时间只有 1% 的差距(安装后反而更低),其中 WhatApp 唤醒 6 次,Facebook 唤醒 3 次,其余全部都是系统应用。WhatApp 我登陆了账号,Facebook 我没有打开过。
注4:安装后的内存占用多出了 40 MB,CPU 温度基本在室温范畴,流畅度未受到重大影响。
可是实际运行如何?
刷推特在大信息流下会有掉帧,不过反应很快,操作很跟手,又不是不能用,不会像国内 APP 那样直接卡死导致整台手机根本无法操作。
WhatApp 据说是国外的微信?反正我没见过几个人用。柱状图呈锯齿状挺有特色,略有掉帧,能用,挺好。
总结:
经过上述测试,我们基本可以得出结论——国内 APP 欠缺优化的代码是安卓手机卡顿的根源。同样一台老旧的手机,在同样的系统下运行国内外两种 APP 有着截然不同的体验,过低的硬件性能让后者在处理大信息量的情况下出现掉帧,但从未停止响应,对系统资源的消耗近乎为 0;而前者不管在任何情况下都会发生严重的卡顿,甚至直接死机,对手机的电力也是灾难性的打击。
一台五年前的安卓手机,即使运行较新的安卓 6.0、从 Google Play 安装最新的国外APP依旧有着良好的体验,掉帧就和iPhone 4s 运行 iOS9 的反应迟缓一样,都是很合理的事情(又不是不能用)。但一旦安装了国内市场下载的国内应用,体验立刻天翻地覆——而很快也会有人站出来说,MSM8260 的性能过于低下,应以本时代主流的骁龙8系、骁龙6系体验为准——可是国外应用的流畅运行,又该当何讲?
任何时候,任何性能,只要系统还在流畅运行,就不应该在应用上卡死。本次实验的目的是揭露国内 APP 对安卓手机性能的影响,这里面有许多值得思考的东西,我们平时抱怨安卓卡顿的时候,到底是在抱怨什么?
安卓早已不输于 iOS,而国内对比国外的 APP 却一直一败涂地。
【额外实验】
实验组和对照组之间有一个意义不是那么重大但可能会有影响的变量:Google Play。如果对手机影响巨大的国内 APP 均通过谷歌审查的 Google PLay 下载,将会如何?由于部分国内 APP 并未上架 Google Play,因此实验数量减少到 12 个,未上架的 APP 为:百度贴吧、滴滴出行、手机京东、百度手机助手。和之前一样,安装应用后全部运行一遍登陆账号并重启,以下是待机 12 小时后的观测结果:
(可以看出,通过 Google 审核的国内应用相比野蛮生长的国内状况稍有好转)
在本次实验中,系统流畅度在最好的情况下几乎和国外 APP 一样不会产生严重影响,唤醒大幅度减少且续航大幅度延长,待机状态下手机不会明显发热,CPU 温度基本相当于室温,各个APP均能正常运行而不会导致手机卡死(但严重卡顿);然而,唤醒依旧集中在手机解锁时,因此亮屏有着两到三秒的延迟,显示桌面后至少有一分钟的卡死,无法进行任何操作,同时资源占用比起国外 APP 依旧多了不少。
看来即使是谷歌规范过后的国内 APP,依旧有着不容忽视的余威。
转载声明:本文已获授权转载,原文地址:https://zhuanlan.zhihu.com/p/26263557
其实,我在扯淡!
不止技术与职场,还有生活与远方
长按关注,听我扯淡
——
微博: @googdev
个人博客: http://stormzhang.com