【发布时间】:2018-07-15 20:34:17
【问题描述】:
我有一个 Android paho MQTT 客户端,它侦听传感器数据并在出现任何阈值违规时提醒用户。 我的 app.gradle 中有以下内容:
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
我在清单中将其注册为服务:
<service android:name="org.eclipse.paho.android.service.MqttService" />
即使应用不在前台,服务也会接收 MQTT 消息。
MqttConnectOptions options = new MqttConnectOptions();
options.setAutomaticReconnect(true);
options.setCleanSession(false);
client.connect(options);
我担心的是,由于不断与 MQTT 代理进行后台同步,手机电池会很快耗尽。所以我想取消订阅,并在一天结束时断开与服务器的连接。我宁愿丢弃所有在夜间收到的消息。
有人可以指点我如何正确执行此操作的教程吗?只需致电client.disconnect()
下次连接时会导致多个订阅和重复消息。必须有一种干净的方法来关闭和重新启动服务。请提出建议。
【问题讨论】:
-
关闭
onPause()中的服务 -
试过了,然后在 onResume() 中重新连接。我发现了两个问题:每次我的手机改变方向时,这些都会被重复调用,最终我会为同一条消息多次回调。其次,它强制应用程序保持在前台。但我需要每天在后台运行几个小时的应用程序。
-
那么不要使用 Paho 服务,而是编写自定义 JobIntentService 并使用 Paho 客户端
-
没错! JobIntentService 最适合 OneOff 任务,但如果您有其他要求,例如网络和充电器插入 JobScheduler 是一种可能性。有时您无法避免使用前台服务,并且有一些关于 Oreo 后台限制的内容可供阅读。
-
同样,您可以在完成一些计算后使用 stopself() 关闭您的服务,如果出现问题,甚至可以在 catch 块中关闭。
标签: android mqtt paho disconnect