如果你用过iPhone和安卓同时期的旗舰,或者是双持的话就会发现,在日常使用的情况下,iPhone的综合续航情况其实是要强于比它电池容量更高的安卓机器的(特指ProMax/Plus等大电池的型号),尤其是在使用周期较长的情况下(软件安装较多的情况下)
IOS
比如,笔者一直以来都是安卓和苹果双持,对于这一点也是相当认同的的。
那么大家有没有考虑过这是为什么么?难道这真的只是错觉?我告诉你还真不是,接下来我们就来好好的谈一谈这个事情。
国内特色之“应用推送”
应用信息推送,听名词是不是很陌生,用人话来说就是有人给你发一条微信,然后你的手机给你推送一条弹窗,这就是“应用信息推送”。那么为啥这玩意会成为杀死安卓手机续航的元凶呢?别急,我们慢慢来讲。
一款应用想要向用户的手机推送一条新消息,目前业内只有两条路可以走——拉(Pull)和推(Push)(包括C2DM\SMS等其实都可以归为Push这个分类)
如果你学过开发,这俩名词应该都不陌生,这可是git操作的必备基础功能。
我这里会用人话来告诉大家,这俩方式有啥区别,说完你就知道国内安卓系统为啥费电以及iPhone为啥省电了。
Pull方式:
大家可以先思考一下,当你想要听到别人说话的时候,是不是要让自己的耳朵(准确来说是听觉中枢)始终保持活跃的状态?总不可能只让他在想听到的时候才活跃吧?
采用Pull方式的新消息推送机制本质上也是这个道理,如果一款应用想要给手机用户推送一条新消息,需要怎么做呢?很简单,在用户的手机上专门内置一个永远保持工作状态的“APP进程”,始终和自家的服务器保持连接不就行了吗?在技术上这就叫做“长轮询”。
长轮询
简单来说,就是让用户的手机上存在一个“该应用接受推送消息的进程”,该进程每时每刻都会从服务器上拉取信息,一旦应用服务器返回了一条消息,他就会调用起手机内置的推送组件给用户进行推送。
聪明的读者应该看出这个方式的问题所在了——他需要在用户的手机中长期内置一个“PushService”的服务,并且这个服务还需要持续的处于工作的状态。
1个应用对应的就有1个““PushService”服务,10个应用就有10个,100个应用就有100个,这些应用推送程序会无时无刻的向外发送和接收数据,必然会增加该设备的电量以及流量消耗。
听上去是不是有点令人发指?然而残酷的是,在国内安卓平台所有APP用的都采用了这个最简单的方式。你当然可以把这些进程杀掉,但是同时你也就接收不到新消息了。
Push方式:
那么有没有其他的方式可以规避这个问题呢?当然有,那就是Push方式,比如就有一种SMS的推送方式,通过给用户手机发送短信,然后逆向读取解析手机短信,再给用户进行推送信息,这种方式,手机只是被动的接收信息,也就不需要在用户手机上内置什么进程了,大大降低了用户端的功耗。
但是他的问题在哪呢?——应用开发者需要向移动运营商支付短信费用,哪怕按照一条一分钱来算,这可是一笔非常庞大的支出,试问哪个APP开发商愿意掏这个钱?
那么还有没有解决方案呢?有,目前行业内最佳的解决方式呢就是下一条:云端推送。
云端推送(Push和Pull方式的集合)
大家看完第一条的时候应该就会有一个疑问,这么多应用为什么不能找一个中间商,把这些信息都给汇总然后拆分,让用户在只保留一个进程的情况下,把这些信息传递给用户呢?
你这个想法很好,苹果和谷歌也是这么做的,也就是大名鼎鼎的——APNs(Apple Push Notification Service)以及C2DM(Cloud to Device Messaging)(现在已经被FCM取代)。
用户只需要保留一个系统级的推送接受服务即可,其功耗自然就要比传统安卓的推送方式低得多了。苹果手机之所以能够拥有比安卓手机更出色的静态续航体验,本质上就是因为这个机制在发挥作用。
在国外的安卓手机上,也是可以实现这种方式的,然而在国内的手机上则不行,原因很简单,谷歌这套框架服务在国内压根访问不了。
有人会问了,为啥国内不能诞生一个能够提供这种服务的公司呢?当然有,比如大名鼎鼎的统一推送联盟,但是坟头草已经三米多高。
为啥?这事你手机厂商干着急没有用,因为这背后牵扯到各大APP开发者的核心权益了,因为信息的推送 = 广告,广告 = 利益,利益 = 收入,这么说大家就应该懂了吧?
那么国内有没有可以给予这个体系的手机设备呢?有,那就是搭载鸿蒙NEXT系统的华为手机,然而截止目前,鸿蒙NEXT系统的整体生态依旧较为孱弱,短期内想要和IOS抗衡不太现实。
说到这也提醒一下大家,没有推送消息价值的APP,一定要及时关闭推送服务,否则既消耗流量、又消耗电量。
这就是国内安卓手机为啥很多续航都很差的核心原因之一。
胡说八道[抠鼻]