我知道,就是这样。但我不明白,为什么?
为什么不定期简单地向服务器发送查询?当然,它可能会释放电池并增加互联网流量。我明白了。但是如何使用Google Cloud Messaging可以消除这些问题呢?
我找到了an answer。但对我来说并不是很清楚。
有人能给我一个明确的解释吗?
答案 0 :(得分:12)
假设您手机上有50个不使用GCM的应用程序。每个应用开发者都决定每分钟调查一次后端。
由于这些都是独立的应用程序,因此每次调用可能不会与另一个api调用同时发生。对电池的最大杀戮是当一个Android设备中的无线电在关闭之后必须重新打开以进行API调用时,所以多个呼叫在时间段之间发生电池更快地耗尽电池(在无线电状态机上阅读这篇文章到更好地理解为什么这是https://developer.android.com/training/efficient-downloads/efficient-network-access.html)
此外,每个应用程序将命中一个单独的端点。每次进行API调用时,都必须完成给定服务器的连接过程。使用批处理的api请求或HTTP 2.0,可以通过不必重新进行握手或连接过程来优化进入同一服务器的多个调用。
现在想象一下,所有50个应用程序都使用了GCM。 GCM将代表所有50个应用以某个固定时间间隔轮询端点。假设GCM每分钟向服务器轮询一次,所有相应应用程序的后端都将其通知发送到设备。您已经减少了50个不同的奇怪定时API调用,可能会打开和关闭电池到一个api调用。您将使用较少的数据进行轮询。您不需要支付50个不同服务器的HTTP调用连接步骤的成本。此外,谷歌正在使用相同的轮询检查操作系统更新,因此使用GCM没有额外的网络开销(此信息基于旧文档What technology does GCM (Google Cloud Messaging) use?)
此外,请直接在Android网站上查看此解释,文章名为“尽量减少定期更新的影响”(http://developer.android.com/training/efficient-downloads/regular_updates.html):
每次您的应用程序轮询您的服务器以检查是否需要更新时,您都会激活无线电,在不需要的情况下耗电,在典型的3G连接上最长可达20秒。
Google Cloud Messaging for Android(GCM)是一种轻量级机制,用于将数据从服务器传输到特定的应用实例。使用GCM,您的服务器可以通知在特定设备上运行的应用程序,即可以获得新数据。
与轮询相比,您的应用必须定期ping服务器以查询新数据,此事件驱动模型允许您的应用仅在知道有数据要下载时创建新连接。
结果是减少了不必要的连接,减少了应用程序中更新数据的延迟。
GCM使用持久性TCP / IP连接实现。虽然可以实现自己的推送服务,但最好使用GCM。这最大限度地减少了持久连接的数量,并允许平台优化带宽并最大限度地减少对电池寿命的相关影响。