我在一个 android 应用程序中使用 MQTT,使用 Eclipse Paho 页面上的最新 jar。
我通过在 1 的 QOS 下发送偶尔发布来手动检查连接,如果在特定超时下未交付,我断开 MQTT 并重新连接。当数据连接丢失然后重新连接时,我也强制重新连接。
问题是 disconnect 方法会挂起线程并且永远不会完成 - 即使超时为零或负超时。它应该有一个 30 秒的内部超时,但它已经过了很长时间并且永远不会完成。
MqttClient 对象需要断开连接,否则它会在后台处理数据。我现在正在做的是分离一个单独的线程来断开 MQTT,然后完全创建一个新的 MqttClient。它停止使用数据,但这是一个糟糕的解决方案,因为新线程只是挂起。
有任何想法吗?
编辑:在进一步调查中,它似乎阻止了尝试在第 70 行停止 CommsReceiver:
public void stop() throws IOException {
synchronized (lifecycle) {
//@TRACE 850=stopping receiver
trace.trace(Trace.FINE,850);
if (running) {
running = false;
try {
//@TRACE 851=stop: wait on lifecycle
trace.trace(Trace.FINE,851);
// Wait for the thread to finish.
lifecycle.wait(); // THREAD HANGS //
}
catch (InterruptedException ex) {
}
}
}
}