2

我正在开发一个 Android 通知应用程序,它在 MQTT 消息中获取 XML 数据以构建通知,但还包含在单击通知时执行 Intent 的数据。我通过使用 Polling/Pull 消息实现了 Push 消息,因为我认为等待消息到达并对其执行某些操作会比轮询 Web 服务器以获取更新和解析可能没有任何新数据的结果更有效。

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

所以现在我面临一个选择。在我的服务代码中实现 wi-fi 锁定,或使用警报管理器让我的服务定期唤醒,检查 MQTT 发布然后退出。

这个wifi 唤醒锁与警报管理器表明 wifilocks 非常低效,我应该使用警报管理器。如果是这种情况,我就会失去推送通知的“即时交付”优势,并且有效地轮询数据。谷歌的云消息/WhatsApp/Viber 等应用程序如何在通过保持 Wi-Fi 处于活动状态的情况下允许设备休眠且不耗尽电池的同时进行即时消息传递?

4

1 回答 1

2

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

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

于 2013-06-18T17:46:02.870 回答