首页 > 天下杂侃 > 科技数码 > 【科普】Android上QQ、微信等软件耗电源于TC体制问题
2013
01-05

【科普】Android上QQ、微信等软件耗电源于TC体制问题

QQ、旺旺等软件运行后台服务连接服务器,不仅占用CPU,维持3G网络也是非常费电的。所以Android即使有“真后台”,但推送功能应用也非常普遍。

可是实际使用中,启用QQ、旺旺等软件推送后,虽然耗电有所改观,但省电、及时性依然比不上Android自带Gmail、Google Talk等软件,这是为啥捏?

轻飏带你走进Android,走进科学,告诉你为啥是TC体制问题造成了QQ、微信等软件耗电又推送不及时。

首先来介绍一下Android自带的推送机制,Google在I/O 2010引入C2DM(Android Cloud to Device Messaging)服务,并作为Android2.2的一部分发布。

Android Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。

该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。

C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些消息。
原理如下图:

【科普】Android上QQ、微信等软件耗电源于TC体制问题 - 第1张  | 茶烟轻飏

C2DM服务允许第三方开发者开发相关的应用来推送少量数据消息到用户的手机上,与Gmail、Google Talk等软件共用同一个连接,减少内存占用以及耗电。因为Android上C2DM属于系统级应用,优先级很高,所以不用担心进程被挤造成推送延时。

启用C2DM很简单,只需要一台Android手机拥有Google服务并添加一个帐号即可。
但是在TC这神奇的国度就不一样了,国行手机Google服务被阉割,C2DM服务器由于The Great Fire Wall的存在,在国内受干扰较厉害。

更重要的是一些213 ROM制作者和半吊子“高手”喜欢把第三方固件中Google服务“精简”掉,国内各软件商为了保证自家服务推送正常,不得自己搭建XMPP服务器。

这样造成了一个应用一个推送进程,造成了CPU/内存占用大导致耗电问题,由于优先级不高,Android内存不足时也可能被挤掉,导致推送延迟。

除了C2DM在实现Android消息推送机制的方案还有以下几种:

1、轮询(polling):应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。

2、长连接:这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。不过这个方案也存在不足,就是我们很难在手机上实现一个可靠的服务。Android操作系统允许在低内存情况下杀死系统服务,所以你的通知服务很可能被操作系统Kill掉了。。

当然还剩下最后一种,也是除了C2DM外最靠谱的推送方案,那就是采用XMPP协议推送Android信息(C2DM服务器底层也是采用XMPP协议封装),常见的有AndroidPN(微信和这个服务端都是用的openfire,同样是开源的)、MQTT。

不过这样依然一个应用一个推送进程,无法从根源上解决耗电、推送延迟问题。
要从根源上解决这问题嘛,就要使用C2DM,既然要用C2DM嘛就要。。。【科普】Android上QQ、微信等软件耗电源于TC体制问题 - 第2张  | 茶烟轻飏

最后编辑:
作者:轻飏
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

【科普】Android上QQ、微信等软件耗电源于TC体制问题》有 3 条评论

  1. Ragnarok 说:

    其实android的推送方案国内也有第三方做的方案嘛:比如说这个极光推送,http://jpush.cn/,看上去好象还挺出名的,C2DM的话如果应用是给国内用户用的话就不用想了= =

  2. Bleaer 说:

    解决了困扰很久的一个问题..感谢作者

  3. haomuch 说:

    那么在国外微信会不会自动检测IP切换到比较省电的Android推送服务器上呢?现在手机上最耗电的就是微信了。比whatsapp耗电几十倍!另外为什么同在国内,陌陌就没有那么耗电?而且推送也很及时

留下一个回复

你的email不会被公开。