2012-11-12 4 views
5

Ich benutze MQTT in einer Android-Anwendung, mit der neuesten jar wie auf der Eclipse Paho Seite gefunden.MQTT Eclipse Paho-Client auf Android, trennen hängt und nie beendet

Ich überprüfe die Verbindung manuell, indem ich gelegentlich unter einer QOS von 1 veröffentlicht, und wenn es nicht nach einer bestimmten Zeitüberschreitung geliefert wird, trenne ich MQTT und erneut verbinden. Wenn die Datenverbindung dann verloren ist, erzwinge ich auch eine erneute Verbindung.

Das Problem ist, dass die Trennungsmethode den Thread aufhängt und nie beendet wird - auch bei einem Null- oder negativen Timeout. Es soll eine interne Zeitüberschreitung von 30 Sekunden haben, aber es geht lange darüber hinaus und wird nie abgeschlossen.

Das MqttClient-Objekt muss getrennt werden, da es ansonsten im Hintergrund Daten einfriert. Was ich jetzt mache, ist einen separaten Thread auszuwerfen, um MQTT zu trennen und dann einen neuen MqttClient zu erstellen. Es hört auf, Daten zu verwenden, aber es ist eine schlechte Lösung, da der neue Thread einfach hängen bleibt.

Irgendwelche Ideen?

Edit: Bei der weiteren Untersuchung scheint es CommsReceiver an der Linie zu stoppen 70 versucht, blockiert zu werden:

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) { 
      } 
     } 
    } 
} 

Antwort

4

Das Problem liegt an einem Timing-Fenster in der stabilen Version des Paho-Clients, wenn Sie den Code im entwickeln Zweig der verwenden Paho-Repository. Sie sollten nicht auf dieses Problem stoßen, weil es als in diesem Fehler behoben ist https://bugs.eclipse.org/bugs/show_bug.cgi?id=394066 obwohl es nicht der stabile Zweig Ich habe festgestellt, dass die Entwicklung Zweig zuverlässig sein.