我正在开发一个Android通知应用程序,它在MQTT消息中获取XML数据来构建通知,但也包含在单击通知时执行意图的数据。我使用轮询/拉消息实现了推送消息,因为我认为等待消息到达并用它做一些事情要比轮询web服务器更新和解析可能没有任何新数据的结果要高效得多。
然而,Android的默认省电方案会在屏幕关闭时关闭wi-fi以节省电量,这意味着我与MQTT服务器的连接断开。当我返回屏幕时,我的服务器连接被重新建立,MQTT服务器上的最后一条消息被传送。
所以现在我面临着一个选择。在我的服务代码中实现wi-fi锁,或者使用警报管理器让我的服务定期唤醒,检查MQTT发布,然后退出。
这个wifi wakelock vs. alarm manager表明wifilocks的电源效率非常低,我应该使用警报管理器。如果是这样的话,我失去了推送通知的“即时传送”优势,我可以有效地轮询数据。像谷歌的云消息/WhatsApp/Viber这样的应用程序是如何在允许设备休眠的同时保持wi-fi活动而不耗尽电池的同时进行即时消息传递的?
发布于 2013-06-19 01:46:03
由于MQTT适合使用移动网络,除非您使用的是只支持wifi的设备,因此您只需要使用WakeLock来停止CPU睡眠,这样您就可以与MQTT服务器进行通信。
但是,在只使用wifi的设备上,您需要使用WifiLock才能继续连接到MQTT服务器。关于电池寿命,你需要做一些测试,看看对只有wifi设备的电池寿命的影响。
https://stackoverflow.com/questions/17143661
复制相似问题