Parse.com 推送服务电池影响
Posted
技术标签:
【中文标题】Parse.com 推送服务电池影响【英文标题】:Parse.com Push Service Battery Impact 【发布时间】:2014-09-26 08:01:09 【问题描述】:我无法使用GCM
,我正在寻找解决方案来支持我的应用程序中的推送服务。
我从Parse.com
看到了PPNS
,我现在正在使用它。我启动一个一致的websocket
连接并每15 分钟检查一次连接。它还会在每次设备唤醒时对其进行检查。
仅此PushService
系统对电池的影响大概是多少?
有人用过并测试过吗?
【问题讨论】:
【参考方案1】:TL;DR:这就是推送通知的工作原理。如果它是您应用中的必需功能,请不要担心电池使用情况。
加长版: 据我了解(实际上是使用我自己的 MQ 在我自己的应用程序上开发的),这就是大多数/所有其他处理推送通知的 API 所做的,即它们保持与各种 MQ(ActiveMQ、MSMQ 等)的持久连接.) 并订阅将消息“推送”给客户端的特定主题。
所有这些都需要唤醒锁,以便在手机“休眠”或网络连接恢复时保持此连接有效,以确保发送通知。它们中的一些甚至保持一定程度的持久性,以防在连接丢失时消息到达,以便它们可以在重新连接时播放消息(尽管这在服务器资源方面是一项昂贵的功能)。
您的用户很可能已经在他们安装的一个/多个应用程序(WhatsApp、Skype 等)中安装了 WakeLock——例如,您可以通过查看 WhatsApp 所需的权限来检查这一点。其中之一是“防止电话从睡眠中”)。
这反过来意味着添加额外的 WakeLock 不会产生实质性影响,因为手机无论如何都不会真正进入完全睡眠状态。如果您的应用程序是唯一具有此 WakeLock 的应用程序,那么电池会产生实际成本,但这是不可避免的,除非您确保将消息保留在队列中并且仅在用户解锁手机时才显示通知,这是 (1) 昂贵的维护您的队列和(2)不是很方便,因为用户会错过通知,除非他们已经在积极使用手机,所以后台通知会出错。
我也不认为如果您只是每 15 分钟左右 ping 一次服务器(间隔通常是底层消息队列的保持活动时间),电池寿命不会受到很大影响。
此链接应该可以帮助您了解消息传递的本地实现是如何工作的,并且应该让您了解为什么需要 ping 以及为什么要维护 WakeLock:
http://dalelane.co.uk/blog/?p=1599
编辑:添加了 TL;DR
【讨论】:
据我所知,Whatsapp 和所有类似的应用程序都使用 GCM。 GCM 为所有应用程序保持一次持久连接。所以再多加一个基本上就是让电池效果翻倍。在我的例子中,我们的用户使用我们的特殊平板电脑,它在没有 Google 服务的情况下运行 AOSP,并且只安装了我们的应用程序。 其次,我知道 GCM 和所有系统都相似,但我也对它们的效率感到好奇。在这种情况下,特别是 Parse.com。 Parse.com 的 PPNS 是否高效编写?就是这个问题。 这里有两件事会对电池使用产生不利影响:(1) 通过允许网络在后台工作来防止手机完全休眠/睡眠;(2) ping到您的 MQ。第一点对电池的影响比第 2 点要大得多。 GCM 和所有使用 MQ 的类似服务都将获得 WakeLock。您可以拥有任意数量的这些锁,效果是一样的,即手机/平板电脑不休眠。如果您担心连接状态更改时ping并重新连接,我个人不会担心... [继续] 但我会做一些测试以确定。老实说,我非常怀疑每 15 分钟 1 次 ping 是否会消耗大量电池,但我不确定,因为我没有进行任何详细分析。但是,如果您的应用程序是平板电脑上唯一运行的应用程序,那么我会更担心第一点(WakeLock),因此,您的平板电脑可能以前没有 WakeLock,但现在需要一个。如果必须保存电池,这对您来说将是一个交易破坏者。 您有测量电池影响的方法吗?我也对此感到担忧。我的应用程序必须在具有 Google 服务的设备上运行,但我们将完成解析,因此我们将使用他们的推送服务,除非我发现这会影响电池寿命。以上是关于Parse.com 推送服务电池影响的主要内容,如果未能解决你的问题,请参考以下文章
推送通知在 iphone 中没有收到来自 Parse.com 服务器的某些时间
如何使用 Parse.com Cloudcode 发送推送通知
Parse.com 在 Xamarin 中推送 Android