实现Android通知应用程序的最节能方式

实现Android通知应用程序的最节能方式,android,notifications,wifi,push,mqtt,Android,Notifications,Wifi,Push,Mqtt,我正在开发一个Android通知应用程序,它在MQTT消息中获取XML数据以构建通知,但也包含在单击通知时执行意图的数据。 我使用轮询/拉式消息传递实现了推式消息传递,因为我认为等待消息到达并在轮询web服务器以获取更新和解析结果(可能没有任何新数据)时对其进行处理会更加高效 然而,Android的默认省电方案在屏幕关闭时关闭wi-fi以节省电源,这意味着我与MQTT服务器的连接中断。当我返回屏幕时,我的服务器连接被重新建立,MQTT服务器上的最后一条消息被传递 所以现在我面临着一个选择。在我的

我正在开发一个Android通知应用程序,它在MQTT消息中获取XML数据以构建通知,但也包含在单击通知时执行意图的数据。 我使用轮询/拉式消息传递实现了推式消息传递,因为我认为等待消息到达并在轮询web服务器以获取更新和解析结果(可能没有任何新数据)时对其进行处理会更加高效

然而,Android的默认省电方案在屏幕关闭时关闭wi-fi以节省电源,这意味着我与MQTT服务器的连接中断。当我返回屏幕时,我的服务器连接被重新建立,MQTT服务器上的最后一条消息被传递

所以现在我面临着一个选择。在我的服务代码中实现wi-fi锁定,或使用Alarm manager定期唤醒我的服务,检查MQTT publsh,然后退出

这表明wifilock的功耗非常低,我应该使用alarm manager。 如果是这样的话,我就失去了推送通知的“即时交付”优势,我正在有效地轮询数据。
像谷歌的云消息/WhatsApp/Viber这样的应用程序如何在保持wi-fi活动的情况下让设备睡眠而不耗尽电池电量的同时实现即时消息传递呢?

因为MQTT适合使用移动网络,除非您的设备仅使用wifi,您只需要使用WakeLock来停止CPU睡眠,这样就可以与MQTT服务器通信。如果与服务器的连接丢失,您可以编写服务以尝试重新连接

但是,在仅使用wifi的设备上,您需要使用WifiLock才能继续连接到MQTT服务器。关于电池寿命,您需要进行一些测试,以了解仅wifi设备对电池寿命的影响