前言
在使用手机的过程中,有些人会发现,安卓手机和使用 iOS 系统的手机耗电量是不一样的,安卓手机可能需要一天两充,但同样甚至更小的电池容量,苹果手机只需要一天一充。
这个问题是多方面的,接下来我们就来一一讲述。
推送服务
iOS 的推送机制比较简单,应用开发者通过接口将需要推送的信息发给苹果服务器,苹果服务器则在一个合适的时间将信息发送到用户的手机上,又称为“推送”模式。
当该软件不支持推送时,会使用“获取”模式,系统会定期从服务器主动拉取新消息。但在系统默认设置中,手机只会在接入 Wi-Fi 并处于充电状态时主动获取新消息。
当然,这会导致某些信息推送不及时。但目前主流的 IM(即时通讯)软件都使用了“推送”的消息获取模式,那些不支持的大部分都是没有即时性需求的软件或开发者已经放弃的软件。
再来说说安卓。安卓的开发商 Google 也设置了相应的推送机制,称为 GCM(Google Cloud Messaging),是原生 Android 系统的默认推送方式。
但实际,由于一个叫做 GFW 的东西的问题,国内的手机无法使用这项服务。
本来使用 GCM 的 Android 系统也能达到甚至超越 iOS 系统的功耗水平,但这项核心推送技术的问题,导致了信息推送无法送达。
怎么办呢?国内的手机厂商针对自己的手机系统对 Android 进行了定制,去掉了 GCM,改为自建的推送服务。
但是,各厂商的推送服务不同,这就造成了一个 APP 必须适配各种推送服务:华为的、小米的、OPPO 的......
复杂的适配和不完善的借口文档吓退了很大一部分 Android 开发者,他们决定,不适配推送服务。
他们采用后台保活的方式,让应用尽量常驻后台,并每隔一定时间向自家的服务器获取消息,这就造成了三个问题:
- 推送消息可能不及时
- 占用内存
- 增加耗电量
一般来说,一个开发商的 APP 使用的是同一个推送通道。当你的手机安装了同一开发商的多个软件时,为了保证共用推送通道的活跃,保证消息的及时送达,这几个软件会采用关联启动的方式,通过不断唤醒其余的软件来保持通道活跃。
于是,不同厂商的无数个软件相互唤醒,造成了 CPU 核心无法正常休眠,从而导致功耗急剧上升。
为了解决这个问题,手机厂商开发了自启动管理功能,专门解决这个矛盾问题。
但是,应用厂商又引出了一个叫做 WakeLock 的机制,通过申请唤醒锁来进行唤醒,保持推送通道活跃。
比如说很过分的鹅厂月亮软件。
于是乎,广大的 Android 开发者受不了唤醒锁的折磨,大神们开发了自启动管理软件,通过辅助功能或者 root 的方式解决这些问题。
但是,辅助功能的解决方案效果不甚理想,甚至还可能导致耗电量进一步增长,而 root 会失去手机厂商的保修,对普通用户门槛也较高,于是,他们展开了一场漫长的争夺。
直到,一个叫做统一推送联盟的组织横空出世,立志解决这个问题......
后台管理
首先,安卓和 iOS 的后台管理机制不同,可以说,安卓是“活动优先”,而 iOS 是“休眠优先”。
这次先来说说安卓。
当你使用一台安卓手机,将一个应用退至后台时,应用一般情况下还会保持活动状态。
当然,这是基于原生安卓系统而言的。国产的安卓系统都对后台管理功能进行了一定加强,会在一段时间后休眠这些软件。
而应用是否休眠,很大程度上取决于开发者。
有些开发者为了尽量让用户的手机节省电量,会在应用不需要活动时将应用主动休眠。
而另外一些开发者为了应用的一些功能或推送服务可用,会让应用在后台一直保持活跃状态,这就会导致耗电量增加。
而针对这个问题,手机厂商开发出了自家的后台管理,可以通过智能识别应用状态来实现应用休眠,这样就降低了整体功耗。
但是,魔高一尺,道高一丈,应用开发者依然会通过其它方式来尽量保证应用在后台存活。
而 iOS 的机制则简单的多,当应用退至后台时,系统会立刻将应用休眠,除非该应用出现了以下情况中的一种或多种:
- 该应用要求高即时性,比如导航应用等
- 该应用还在进行一些工作,比如下载软件。
- 该应用的开发者主动通过调用接口的方式来通知系统不要将它休眠。
但是即使应用开发者采用了这样的方式, iOS 系统依然会持续监测应用的状态,并在应用退出这些状态时立刻将它休眠。
如果遇到开发者通过恶意调用这些接口的方式来让应用在后台存活,iOS 系统会在一定时间后强制将这些应用休眠。
这也就是相同内存的苹果和安卓手机中,苹果手机会更流畅的原因。
内核
安卓的底层是 Linux 系统,这本是一个为电脑和服务器端开发的系统,它不适合在手机上运行。
为了解决这个问题,安卓的开发商 Google 对安卓系统进行了一定的改良,去掉了不会经常使用的功能。
但是,安卓系统中日常会使用的功能仍然不及总功能的 30%。
引用华为最近在鸿蒙发布会上的一句话,安卓采用的是宏内核架构。
而 iOS 系统的底层是 Unix,这是一个可以运行在绝大部分平台的操作系统。
小到智能手表,大到路由器,它们的底层都是 Unix 系统。
安卓系统的应用开发大多是基于 Java 的。
而苹果系统的应用开发则使用的是他们自己研发的语言 Swift。
作为语言的开发者,苹果当然很清楚这种语言的特性以及运行效率,可以通过在架构上进行优化的方式,来尽可能降低软件运行的功耗。
如何尽可能降低安卓系统的功耗
首先,尽量从 Google play 上下载软件。
Google play 作为谷歌的应用市场,它的审核比国内的应用市场要严格的多。
Google play 上的软件,一般都不会常驻后台,缩短手机的续航时间。
同时,国内的酷安也是一个好选择。
再者,绿色守护和 AppSo 联合发起了一项称为“安卓绿色应用公约”的项目。
加入安卓绿色应用公约的软件,都会主动在不需要进行活动时进入休眠状态,来尽可能降低手机的功耗。
在酷安应用市场,每个软件是否加入了安卓绿色应用公约,在其软件名称旁都有标明。
如果同一领域有多个软件可选,应该优先选择这样的软件。
同时,在一些具有极强垄断性的软件领域,你可以通过类似“绿色守护”这类的软件来尽可能降低手机的功耗。
但是,这种方法属于治标不治本。最好的解决方案,还是通过开发者的共同努力以及统一推送联盟的普及,来进一步改善安卓的软件生态,共建一个良好的开发者社区。
希望在几年后,安卓也可以变得像 iOS 一样流畅省电。