经过谷歌搜索后,我想我找到了原因:
Paho MQTT 客户端使用定时任务安排 keepalive ping。 A定时任务当手机进入睡眠状态时将会停止,因此这里是一个糟糕的选择... keepalive ping 的实现可以在课程中找到定时器Ping发送器这是从MqttPing发送器 class.
为了在手机休眠时获取定时事件,必须由报警管理器。我发现的问题的最佳解决方案是创建一个从MqttPing发送器班级。在我自己开始编写这样的课程之前,我在 google 上搜索并发现有人已经在 GitHub 上完成了该课程。
在这里能找到它:https://github.com/Suxsem/Domo-Android/blob/master/app/src/main/java/com/suxsem/domo/MqttPingSender.java
我还必须向 MqttClient 添加一个替代构造函数:
public MqttClient(String serverURI, String clientId, MqttClientPersistence persistence, MqttPingSender pingSender) throws MqttException {
aClient = new MqttAsyncClient(serverURI, clientId, persistence, pingSender);
}
在我实例化 MqttClient (在我的服务中)的地方,我执行以下操作:
MqttPingSender pingSender = new MqttPingSenderAlarm(this);
mqClient = new MqttClient("tcp://<IP>:<PORT>", "MyTestServiceID", new MemoryPersistence(), pingSender);
到目前为止,这似乎工作完美,但我只测试了 20-30 分钟。