MQTT Eclipse Paho cliente en Android, desconectar se bloquea y nunca termina

Estoy utilizando MQTT en una aplicación de Android, utilizando el último tarro como se encuentra en la página Eclipse Paho.

Estoy revisando manualmente la conexión enviando publicaciones ocasionales bajo una QOS de 1, y si no se entrega bajo un cierto tiempo de espera, desconecto MQTT y vuelvo a conectar. Cuando se pierde la conexión de datos y luego se recupera, también forzo una reconección.

El problema es que el método de desconexión cuelga el subproceso y nunca se completa, incluso con un tiempo de espera cero o negativo. Se supone que tiene un tiempo de espera interno de 30 segundos, pero va mucho más allá de esto y nunca termina.

El objeto MqttClient necesita ser desconectado de lo contrario se sitúa en el fondo masticando datos. Lo que ahora estoy haciendo es girar un hilo separado para desconectar MQTT y luego crear un nuevo MqttClient completamente. Detiene el uso de datos, pero es una mala solución, ya que el nuevo hilo se bloquea en su lugar.

¿Algunas ideas?

Edit: En la investigación adicional parece estar bloqueando en intentar detener CommsReceiver en la línea 70:

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

El problema se debe a una ventana de tiempo en la versión estable del cliente paho, si se utiliza el código en la rama de desarrollo del repositorio paho. No deberías encontrar este problema porque está marcado como fijo en este error https://bugs.eclipse.org/bugs/show_bug.cgi?id=394066 aunque no es la rama estable que he encontrado la rama de desarrollo a ser de confianza.

Hay un error archivado aquí: https://bugs.eclipse.org/bugs/show_bug.cgi?id=394066 (probablemente por el OP de esta pregunta, información para @Vipul). El estado dice resuelto para ver cuando el nuevo JAR está disponible con la corrección y el uso que

  • Notificación incorrecta enviada desde el paquete, no se pudo expandir RemoteViews
  • Mensajes de GCM no se entregan
  • ADB empuja varios archivos con la misma extensión con un solo comando
  • Java.lang.SecurityException: Requiere permiso de VIBRATE en Jelly Bean 4.2
  • El método setDefaultPushCallback del tipo PushService está obsoleto usando android
  • Abra la actividad haciendo clic en la notificación push de Parse
  • ADB push -p Descripción incorrecta del archivo
  • ¿Debería llamar a WakeLock antes de crear una notificación?
  • Error al empujar el elemento (s). En android
  • Programación de Android: GCMIntentService Stuck at WakeLock
  • ¿Debo solicitar un nuevo token cada vez que lance mi aplicación para Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.