我在Android应用程序中使用MQTT,使用Eclipse Paho页面上的最新jar.
我通过在QOS为1的情况下发送偶尔发布来手动检查连接,如果在某个超时下没有发送,我断开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) {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里有一个错误: https://bugs.eclipse.org/bugs/show_bug.cgi ?id=394066(可能是这个问题的OP,@Vipul的信息)。状态显示已解决,因此请查看新的 JAR 何时可用于修复并使用它
| 归档时间: |
|
| 查看次数: |
1431 次 |
| 最近记录: |