Android hören Sie Nachrichten aus dem server-socket

Ich versuche zum erstellen einer android-app, die die Kommunikation mit einem lokalen server über ein socket. Die Kommunikation geht von einfachen Befehlen und Daten im JSON-strings mit. Der Kunde sollte ständig hören Sie auf eingehende Nachrichten, die vom server und die Benutzeroberfläche aktualisieren, wenn neue Daten empfangen werden.

Also habe ich einen Netzwerk-Dienst, ist ein gebundener service läuft im hintergrund. Aus meiner Tätigkeit habe ich das binden an den Dienst und erhält eine Instanz des dienstobjekts. Die service-Instanz-Objekt enthält Methoden, die es mir erlauben das senden von Befehlen an den server.

Mein problem ist, wie aktiviere ich meinen service ständig zu hören für Nachrichten vom server, ohne zu blockieren die Möglichkeit zum senden von Nachrichten an den server?

private Socket socket = null;
private PrintWriter out = null;
private BufferedReader in = null;

private Listener listener;

private String host = "10.0.1.4";
private int port = 3000;

public NetworkService() 
{
    try {

        if (socket == null)
        {
        socket = new Socket(this.host, this.port);
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        }

        if(listener == null)
        {
            listener = new Listener();
            Thread thread = new Thread(listener);
            thread.start();
        }

        } catch (Exception e) {
            //...
        }
    }
}

public class Listener implements Runnable
{

    @Override
    public void run() {

        try {
            String line = null;

            while((line = in.readLine()) != null)
                {
                //Do something. Never gets here

                }
            } catch (Exception e) {
                //...
            }

        }

    }
  • Wat du meinst. Tun u möchten diesen Prozess zu starten, wenn die Anwendung ausgeführt wird, oder für eine bestimmte Frist oder, wenn die Anwendung im silent-Modus(wenn die Anwendung läuft im hintergrund)....
  • Gut, ich brauche den service verfügbar sein, wenn ich die Anwendung. Ich muss in der Lage sein zu senden einfache string-Befehle an den server, und ich muss in der Lage sein, um Daten vom server empfangen.
  • Sie wollen eine Reaktion zu erhalten-Formular-server bis zum Ende der Applikation oder für eine bestimmte Zeit..
  • Während der gesamten Lebensdauer meiner Anwendung. Der server kann Nachrichten senden, die über aktualisierte Daten an jedem beliebigen Punkt in der Zeit, und der client sollte in der Lage sein, diese zu empfangen.
Schreibe einen Kommentar