很多朋友可能最近都看到了 AppSo 做的关于安卓手机上国产应用的测试,之后他们还联合了绿色守护发起“安卓绿色应用公约”,这也道出了很多安卓用户的痛:使用安卓手机过程中,会出现莫名其妙的卡顿、发热和掉帧。有人便很自然的把这些归咎于系统优化差或者机器性能不够。但随着手机性能的不断进步,RAM 已经到了 6GB 甚至 8GB,CPU 性能也在持续地在提升,在一定程度上来说手机的性能已经足够强大。而且,从安卓 2.3 开始,谷歌就在不断的打磨和优化,到如今发布的安卓 8.0,再拿安卓渲染机制或内存管理上的问题来解释,显然也有些牵强。按理说现在安卓手机的软件和硬件都已经达到相当高的水准,那么,这些卡顿究竟因何而来呢?
大家一定不会对安卓的自启和相互唤醒感到陌生。在那个塞班折腾签名,iOS 应用丝毫不能互通的年代,这两个特性,原本应是安卓系统的一大亮点,它们给予了应用间更多联动与组合的可能,然而时至今日,他们的身影却出现在各个手机管家的优化选项里面,成了避之不及的选项。在安卓软件的自启中,一些触发条件非常流氓,随手的开关网络,开关蓝牙,甚至是开关屏幕都会带来软件的自启。更为恶心的是软件之间的相互唤醒,这在一些全家桶软件中体现的更为明显,比如阿里系、百度系的软件,一旦你打开其中的一个,这些软件就会通过预设的唤醒途径被一次性全部打开,牵一发而动全身。总的来说,自启和唤醒这两个问题在安卓软件中无处不在。那么,不加以限制的自启和相互唤醒究竟会给我们的手机带来多大的影响呢?来看下面的几个小测试。
系统开关唤醒
为了让测试的结果更为明显,我们特地选择了 2015 年的 MOTO E 这款手机。骁龙 410 加上 1G 的 RAM,现在看来也仅仅是蓝绿大厂的百元机的水准。其预装的安卓 5.0 系统也非常接近于原生的安卓系统,这样也可以尽量避免各个厂商的定制和优化不同所带来的影响。
首先,打开 Wi-Fi,不安装任何第三方软件。我们进行静置、屏幕滑动、开关系统软件等一些基本操作。通过性能监视器这款软件我们可以看到,CPU 使用率始终没有超过 40%,整个过程十分的流畅,未出现明显的卡顿感。即便是在配置如此低的手机上,安卓系统也仍然可以流畅运行,这也从另外一方面验证了安卓系统的优化还是可以的。
软件唤醒
在测试第三方软件方面,我们选择了百度全家桶,共计 12 款软件来进行测试。作为对比,我们首先只安装百度卫士这一款软件。打开百度卫士,CPU 的占用率立即升高,但仅仅在持续了几秒之后便逐渐下降。
安装完全家桶,再打开百度卫士。通过性能监视器可以看到,在打开百度手机卫士的一瞬间,CPU 占用率立即达到了 100%,并且一直维持在满载的水平,手机已经卡顿到无法操作的程度,这一过程持续了超过两分钟。CPU 温度从 40 度左右直接飙到了 55 度左右。内存的使用率也从升高到了 70%。
当大家面对这样的情形时,很多人可能会去选择清理内存来缓解下内存占用,所以我们接着来演示一下清理内存之后会发生些什么。由于原生系统中并没有一键清理内存的按钮,所以我们用百度卫士的功能代替。点击一键清理后,内存使用率瞬间从70%下降到 60% 左右。还不错对不对?别急,我们什么都不操作稍微等一会看看会发生什么。过一小段时间后,可以发现 CPU 使用率又突然变成了 90% 以上,原因想必也不用说了,就是软件被清理掉后,又自动重新启动加载到内存,顺便消耗了大量 CPU 资源,导致我们清理内存后仍然会突然的卡顿起来。开启 Wi-Fi 的瞬间时的情形和前面一样,唤醒太过恐怖。
国内VS国外
在各大贴吧论坛有很多人也针对国产应用存在的这些问题有过探讨,并认为在谷歌商店中的国产应用会有所收敛变得良心一些。那么,实际情况又是如何呢?
我们下载了 8 款百度在谷歌商店上架的应用。安装完之后,同样是仅仅打开百度卫士这一款软件。事实证明,在软件唤醒这方面,谷歌市场版的应用并没有比国内版好到哪里去,一瞬间的 CPU 占用率依然是飙升至 100%,软件依然被相互唤醒。
作为另一个对比,我们用谷歌的全家桶再来进行一次实验。只打开谷歌商店这一款软件,我们可以看到 CPU 的占用率与之前比起来要低很多,并且仅仅持续了一小会便迅速下降。这时候查看一下后台进程也可以发现其他的软件并没有因此被唤醒。对比之前打开百度全家桶的那一幕,差距一目了然。
原因和现状
这样的差别很大程度上源自于国内外软件环境的差异。大多数国外软件追求的是应用的简洁和易用,而国内的软件则是在不断追求功能的多样性,而功能的多样带来的后果就是大量软件的功能重复和多种场景下的应用自启。
并且,很多软件并没有明确的盈利行为,用户的活跃度和广告的分发量便成了很大一部分应用程序追求的指标,而广告的分发所依靠的就是从服务器端将消息推送到客户端。然而遗憾的是,谷歌推出的 GCM 推送在国内并无法正常使用,所以国内软件只能选择第三方服务商所提供的推送通道来进行消息推送。随之而来的就是各种不同推送通道不停的唤醒和占用 CPU,其所造成的资源占用也绝非是简单的线性叠加。某些第三方推送服务商为了扩大利益,通过推送通道悄悄唤醒其他软件,带来“好看”的用户活跃度。而这一切最终都是要拿用户的使用体验来买单。
相对而言,安卓版本号跨度比较大,加之各个品牌的深度定制,安卓碎片化使得软件的适配和优化非常困难。很多海外品牌的手机系统往往本地化不足,没有有效的阻断唤醒的机制。所以在安装大量国产应用后往往会力不从心。就拿索尼而言,即使在最新的XZs中都没有加入控制自启的功能,三星的 TouchWiz 在之前也是存在同样的情况,不过最近的几次更新已经有所重视并开始解决,
而真正做好的就是各个国产手机厂家的 UI 了,经过这几年的不断完善基本都能做到完全的控制自启和相互唤醒。所以想要去管理这些流氓行为的话,对于大部分不喜欢折腾的人,大多数国产 UI 中的安全中心已经足够方便和好用,好好利用系统自带的安全中心,在一定程度上已经可以对付很大一部分流氓软件。对于系统中没有完善的控制自启和唤醒机制的手机而言,首先就是要避免安装 xx 卫士、xx 助手这类软件,他们除了占用大量的资源,真正能给手机带来的优化效果往往很有限。
使用建议
我们可以把一些常用的程序用更为良心的软件替代,像 UC、搜狗浏览器等等可以用 Chrome 或者夸克浏览器来代替,各种应用市场则可以用酷安代替。对于某些喜欢常驻内存的软件,我们也可以通过手动更改一些设置来减少资源占用。这里以 xx 浏览器为例,打开设置选项,将常驻通知栏、消息推送、Wi-Fi 助手等功能关闭,通知和自启也会少很多。
如果有一定动手能力的话,还可以尝试通过获取 ROOT 权限来安装一些软件来实现阻断软件自启和唤醒。这里我们推荐绿色守护、阻止运行、My android tools、冰箱这几款软件。拿新版的绿色守护来说,除了能够在锁屏之后自动将程序休眠外,新版本的还支持切断软件之间的相互唤醒。而对于不想 ROOT 或手机不支持 ROOT 的人,可以使用黑域和绿色守护这两款软件,最新的版本已经能够支持免 ROOT 工作,大家可以根据自己需求进行设置。
虽说绿色守护与 AppSo 发起的安卓绿色应用公约的想法很美好,但靠几个小众 App 作为推广,来让全部的开发者都加入进来显然不太现实,所以在未来很长一段时间,我们仍需与国产应用斗智斗勇,希望看完这篇文章的你,能让手机能变得更为流畅。