我正在开发一个Android通知应用程序,该应用程序在MQTT消息中获取XML数据以构建通知,但还包含在单击通知时执行Intent的数据。 我使用Polling / Pull消息传递实现了Push消息传递,因为我认为通过轮询Web服务器进行更新并解析可能没有任何新数据的结果,等待消息到达并使用它做更多事情会更有效。
然而,Android的默认省电方案会在屏幕关闭时关闭wi-fi以节省电量,这意味着我与MQTT服务器的连接中断。当我再次打开屏幕时,我的服务器连接重新建立,并且MQTT服务器上的最后一条消息已经发送。
所以现在我面临着一个选择。在我的服务代码中实现一个Wi-Fi锁,或者使用Alarm manager定期唤醒我的服务,检查MQTT publsh然后退出。
这wifi wakelock vs. alarm manager表明wifilocks非常低效,我应该使用报警管理器。 如果是这种情况,我会失去推送通知的“即时交付”优势,并且我正在有效地轮询数据。 谷歌的云端消息/ WhatsApp / Viber等应用程序如何通过保持Wi-Fi活动来让设备进入睡眠状态而不会耗尽电池?
答案 0 :(得分:2)
由于MQTT适合使用移动网络,除非您的设备只是wifi,您只需要使用WakeLock来阻止CPU休眠,这样您就可以与MQTT服务器通信。如果与服务器的连接丢失,您可以编写服务以尝试重新连接。
但是,在仅限wifi的设备上,您需要使用WifiLock继续连接到MQTT服务器。关于电池寿命,您需要进行一些测试,以了解仅限wifi设备对电池寿命的影响。