Por más que lo he he intentado, no tengo narices a crear una conexión mqtt con reconexión en un servicio.
En este enlace : https://www.b4x.com/android/forum/threads/b4x-mqtt-connect-reconnect.80815/#content está el código que utilizo para la reconexión de mqtt, pero al implementarlo en un servicio, no hay forma de que funcione correctamente.
Creo que lo más fácil, y lo que te recomendaría Erel, es que lo hagas con B4XPages, y evitarás muchos problemas.
Yo lo tengo así hecho en este ejemplo:
Hi all: *** ADDED Project with B4XPages working on B4A and B4J. See post #15 Not sure if this is the rigth place, or if I should publish it in Examples, @Erel, feel free to move. The code is not perfect, but it works. Most of code is copied/pasted/modified from forums, so this app is made by...
Muchas gracias José por mostrarme tu código. He visto que escribes en mqtt, yo necesito leer. He conseguido poner el código como servicio pero no es demasiado estable. El tema es que necesito leer un topic de mqtt de forma continua pero con un mínimo de estabilidad y sin interrupciones. Creo que voy a optar por el método post, que aunque tendré que hacer un polling continuo para leer los datos, al menos no perderé ningún dato, ya que lo almacenare en una base de datos. Gracias por tu ayuda.
Private Sub client_MessageArrived (Topic As String, Payload() As Byte)
Log("Topic: " & Topic & " Mensaje: " & BytesToString(Payload,0,Payload.Length, "UTF-8"))
toast.Show("Opening Door " & BytesToString(Payload,0,Payload.Length, "UTF-8"))
t2.Enabled = False 'Stop the wait for an answer timeout
End Sub
Creo que lo más estable que vas a encontrar, es este ejemplo de Erel para mantener un servicio siempre activo (en este caso, de localización GPS).
Puedes modificar ese ejemplo para que en el servicio esté el evento client_MessageArrived.