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