我有一个 Android 应用程序,它具有聊天客户端作为其功能之一。聊天客户端使用基于 Android 的Smack库的 XMPP,并在后台运行Openfire作为 XMPP 服务器。连接是使用BOSH建立的。整个 XMPP 连接处理是作为一项服务实现的,即使应用程序的活动不在前台,也可以在后台运行和侦听传入消息。到目前为止,一切正常。
唯一的问题似乎是睡眠模式。在模拟器中(当设置为“保持清醒”时)或使用手机时,XMPP 连接保持不变,应用程序可以发送和接收消息。但是,一旦手机进入睡眠模式,XMPP 连接就会中断——我可以在 Openfire 服务器的管理控制台中看到用户离线。直观地说,我想一直接收消息,例如 WhatsApp。
当然,我在网上搜索过,包括 Stackoverflow,但我无法得到明确的答案。通常,用例似乎是必须定期执行一项任务,例如每小时一次。但这似乎不适用于聊天客户端。因为我认为这是一个常见的用例——毕竟,有这么多聊天应用程序或具有聊天功能的应用程序——这些是我的问题:
如何更改/扩展可以在手机睡眠时接收聊天消息的应用程序?
我偶然发现
WakeLock
。这是要走的路还是这些不适合我的用例?自 Lollipop 以来,还有
JobScheduler
API 本身使用WakeLock
. 好点?例如,WhatsApp 如何处理这种情况?
附带说明:我在使用模拟器进行调试时遇到了睡眠模式的问题。当我在模拟器中关闭“保持清醒”时,屏幕在 1+ 分钟后变黑并且 XMPP 连接中断。但是我不知何故不知道一旦模拟器变黑如何唤醒/重新打开模拟器。Android Studio 实际上在某些时候告诉我设备或其他东西不见了,我必须再次重新启动模拟器。